Arduino Uno + Raspberry Pi = I2C
- Войдите на сайт для отправки комментариев
Чт, 15/08/2013 - 18:46
Завязал Arduino Uno с Raspberry Pi v.2 по i2c, ардуино (slave),малина (master). На ардуино подключены два аналоговых датчика (датчик газа и датчик пламени), вопрос состоит в том, что нужно внести в код pythona чтобы он мог распознавать информацию отосланной ардуинкой.
Думал отправлять с ардуино массив целочисленных (int) - но при компиляции выдает ошибку, можно только отсылать массив байтов (byte), но так как у них ограничение до 255, а датчики конечный свои результат выдает и свыше 1000.
Просто особых навыков программирования на питоне не имею, старался гуглить больше, но мозгов пока хватило только на это. Может кто поможет?
Предоставляю скет ниже :
#include <Wire.h> //библиотека i2c #define SLAVE_ADDRESS 0x04 // ардуино объявлена слейвом int gas = 0; // переменная газового датчика int flame = 0; // переменная датчика пламени int number = 0; // переменная void setup() { Serial.begin(9600); //Set serial baud rate to 9600 bps Wire.begin(SLAVE_ADDRESS); Wire.onReceive(receiveData); Wire.onRequest (sendData); Serial.println("Ready!"); } void loop() { delay(1000); } void receiveData(int byteCount) { while(Wire.available()) { number = Wire.read(); } } void sendData() { gas=analogRead(0); flame=analogRead(1); Serial.print("Gas in air: "); Serial.println(gas,DEC); Serial.print("Flame in air: "); Serial.println(flame,DEC); Wire.write(gas); delay(100); Wire.write(flame); }
И код на Python-e
import smbus import time bus = smbus.SMBus(1) address = 0x04 def writeNumber(value): bus.write_byte(address, value) return -1 def readGas(): gas = bus.read_byte(address) return gas time.sleep(0.1) def readFlame(): flame = bus.read_byte(address) return flame while True: var = input("Enter number: ") if not var: continue writeNumber(var) # sleep one second time.sleep(1) gas = readGas() flame = readFlame() print "Gas in the air: ", gas print print "Flame: ", flame print
особо в си не разбираюсь, но можно отправлять несколько byte вместо одного int, перед отправкой дробить их,
как word== 2 byte (0...65535) та и на приемнике малины брать байты и переводить в соотвествующий тип по формуле типа
(low+ hight byte *255)
Да,кстати, была идея, перевести массив int в byte. Потому что именно с библиотекой wire.h он принимает и компилирует только массив из байтов, но не как с целочисленными. Спасибо за ответ. Буду курить форум и инет в этом направлении.
Еще была идейка (так как byte = 0..255) разделить результат от датчиков на несколько состояний, и уже с одним из них работать (состоянии уже могут принимать значение как раз до 255), но блин..не совсем устраивает такое решение поставленной задачи :(
Так для информации, когда связываете ардуино с распберри нужно использовать logic level converter. Иначе можно сжечь распберри.
https://www.sparkfun.com/products/8745
По поводу вопроса, я на днях пролистал книгу getting started with raspberry pi от o'reilly, там наглядно описывали как нужно посылать сигнал с ардуино на распберри. Точно описать не могу т.к. сам только начинающий с распберри.
офтоп немного... но как бы размышлял одно время и так не нашел ответа.. какой смысл добавлять разбери к ардуино? ардуино не само достаточен?
офтоп немного... но как бы размышлял одно время и так не нашел ответа.. какой смысл добавлять разбери к ардуино? ардуино не само достаточен?
дуино к расбери
дуино к расбери
один фиг, в чем смысл то?
один фиг, в чем смысл то?
Это общий философский вопрос для получения ответа на который погибло много народу - лучше не спрашивай.
Это общий философский вопрос для получения ответа на который погибло много народу - лучше не спрашивай.
просто прикрутил ноутбук к лаптопу, клейкой лентой.. думаю вот теперь хорошо это или плохо :)
Ноутбук это и есть лаптоп;)
Ноутбук это и есть лаптоп;)
не соглашусь... это немного разные вещи.. НЕМНОГО! :)
так никто мне и не ответил ЗАЧЕМ?
на самом деле я заказал себе распберри в дополнение к уно только для того что бы не париться со всякмим шилдами. Если соединить распберри с ардуино, то у ардуино появиться возможность выходить в сеть через ethernet, подключать usb периферию вроде wifi-модуля. Если брать отдельно шилды, то их стоимость превысит одного распберри. Почему нельзя было взять сразу распберри? Потому что мне не очень удобно пользоваться постоянно консолью и питоном, а к ардуино ide я уже привык. Или спалив процессор на уно можно его поменять за 3-4$
Так же можно потом хвастаться перед знакомыми какой ты хакер))
тоесть а УНО со встроеной сетью и ПОЕ вас не устраивает? И пытаюсь представить как можно спалить процесор? Разве что автогеном... и подключения сразу и кабельного изернета и WIFI, какой то глубинный смысл?
http://beagleboard.org/Products/BeagleBone%20Black
во сразу к монитору выход и линукс на нем живет и изернет и крестиком вышивает...
Puhlyaviy, что ты докопался к человеку - нормальный вариант расбери + дуина.
Газовому котлу твиттер завести, котэ и собаку научить свои фотки в инстаграмм постить...
Puhlyaviy, что ты докопался к человеку - нормальный вариант расбери + дуина.
Газовому котлу твиттер завести, котэ и собаку научить свои фотки в инстаграмм постить...
пытаюсь понять, мне правда интересно, просто обсуждали как то такой вариант, но так толком и не выяснили зачем такое может быть нужно... подумалось может челеовек нашел какое то необычное использование и мне оно вдруг тоже нада, но я об этом типа пока еще не знаю .. О.о
В уно нет встроенной сетевой карты, для нее нужен спец шилд.
Спалить процессор можно прямиком подключив двигатель к digitalOut
А если найду?
http://www.seeedstudio.com/depot/seeeduino-ethernet-p-1231.html?cPath=6_7
И что ты нашел? Seeduino
Вот тут где выход для ethernet? http://arduino.ru/Hardware/ArduinoBoardUno
вот скажи, ты сможешь сделать полноценный медиацентр из ардуино и при этом еще оставить возможность для контроля над розетками? Вряд ли, потому что процессор ардуино не может выполнять 2 задачи параллельно. Все его задачи выполняются последовательно. Да, есть библиотеки который ЯКОБЫ позволяют создают многозадачность, но они занимают много места и все равно задачи выполняются последовательно.
И что ты нашел? Seeduino
Вот тут где выход для ethernet? http://arduino.ru/Hardware/ArduinoBoardUno
вот скажи, ты сможешь сделать полноценный медиацентр из ардуино и при этом еще оставить возможность для контроля над розетками? Вряд ли, потому что процессор ардуино не может выполнять 2 задачи параллельно. Все его задачи выполняются последовательно. Да, есть библиотеки который ЯКОБЫ позволяют создают многозадачность, но они занимают много места и все равно задачи выполняются последовательно.
лехко!
все процесоры выполняют одну задачу в один момент :) паралельность это програмирование :) или вы себе в маленьком плеере за 5 баксов идите офигенский кластер с паралельными вычислениями? типа и музыку играет и еще за кнопками следит и на дисплее что то выводит.. :)
Вы не путайте ARDUINO UNO которая является платой для макетных разработок и законченые продукты которые имеют тот же процесор и могут быть запрограмированы с использованием ардуиновского ИДЕ..
Ну ладно, уговорил :)
Подключение Малинке к Ардуинке Уно, связана с тем, что это две разные платформы и системы, ардуино - микроконтроллерная система, малинка - микропроцессорная. В моем случае, Малинка выступает в роли сервера, которые получает и обрабатывает сигналы, и выводит их в веб-интерфейс, а ардуино - микроконтролер, на которую подвешены большинство аналоговых (на малинке вроде как один пин может принимать аналоговый сигнал, но АЦП у него нет) ну и цифровых датчиков (непосредственно на малину тоже можно подкинуть цифровых датчиков). И все в этой завязке большая система, которая может управлять данными и выводить их в различные системы, куда вам пожелается.
Да не трудно придумать зачем "малина плюс дуина" нужны будут.
малина - тяжелая (отностиельно) логика, веб-серверы и т.п.
дуина - совместимость с шилдами, куча библиотек готовых, реалаймовость (понятно что на малине можно реалтаймовости добится, но тогда удобство в качестве "более высокоуровневого" - упадет).
Для подобной связки кошусь еще в сторону вот такой карточки:
Хакаем Transcend WiFi SDHC карту памяти / Хабрахабр
А вот тут - у нее уже RX/TX нашли :)
Новый Vogue. Теперь банановый / Хабрахабр
Так что общатся с дуиной - не видно проблем. И компактенй чем малина :)