ESP8266 I2C Slave
- Войдите на сайт для отправки комментариев
Всем привет.
Есть задача создать "WiFi-мост" для i2c. Для решения задачи приобретено два модуля LoLin. По светлой идее один модуль подключен к i2c в качестве слейва с адресом устройства, которое нужно отдалить, а второй модуль к i2c в качестве мастера. Оба они в одной WiFi сети, и просто ретранслируют полученные байты друг другу по Telnet. В итоге имеем прозрачный WiFi мост для i2c.
Но не писал бы сдесь, если бы не возникло проблем. Грабли в следующем - плата LoLin не хочет работать в качесте слейва. При подключении его к сканеру i2c он не определяется никак, хотя сам как сканер работает отлично, и видит все подключенные к нему девайсы.
Если все то же провести на обычных дуинах, то все работает как положено.
Возможно есть у кого нибудь идеи\предложения, как обойти даную ситуацию?
код сканера i2c - http://playground.arduino.cc/Main/I2cScanner
код для слейва:
// Wire Slave Receiver // by Nicholas Zambetti <http://www.zambetti.com> // Demonstrates use of the Wire library // Receives data as an I2C/TWI slave device // Refer to the "Wire Master Writer" example for use with this // Created 29 March 2006 // This example code is in the public domain. #include <Wire.h> void setup() { Wire.begin(8); // join i2c bus with address #8 Wire.onReceive(receiveEvent); // register event Serial.begin(9600); // start serial for output } void loop() { delay(100); } // function that executes whenever data is received from master // this function is registered as an event, see setup() void receiveEvent(int howMany) { while (1 < Wire.available()) { // loop through all but the last char c = Wire.read(); // receive byte as a character Serial.print(c); // print the character } int x = Wire.read(); // receive byte as an integer Serial.println(x); // print the integer }
А что, ESP8266 умеет работать с I2C? Я как-то всегда через UART её использовал. Ну, слыхал, что плата LoLin ещё и SPI понимает, но про I2C никогда не знал. Подпишусь на тему, почитаю.
как мастер работает без проблем - проверено с 16*2 символьным
Как мастер Вы программно I2C реализуете? Или аппаратно? Если аппаратно, то на каких пинах?
Аппаратная I2C имеет место быть
D1 - SCL
D2 - SDA
А что, ESP8266 умеет работать с I2C? Я как-то всегда через UART её использовал. Ну, слыхал, что плата LoLin ещё и SPI понимает, но про I2C никогда не знал. Подпишусь на тему, почитаю.
В некоторые модули ESP8266 (например ESP-12E, ESP-12D, ESP-12Q) встраивают микроконтроллер STM8. А плата LoLin основана как раз на ESP-12E. Поэтому SPI там выведен аппаратный от STM8, а на счёт I2C не уверен.
По поводу I2C (библиотека Wire) пишут, что: "Only master mode works, and Wire.setClock has not been verified to give exactly correct frequency. Before using I2C, pins for SDA and SCL need to be set by calling Wire.pins(int sda, int scl), i.e.Wire.pins(0, 2); on ESP-01."
Мда, вот что в сообществе http://www.esp8266.com/ мне ответили :"ESP Wire library doesn't support Slave mode yet .."
Спасибо, мужики. Теперь понятно, я то с младшими ESP модулями работал.
Мои поиски гуглом на предмет софтварного I2C, способного работать в режиме слейва не дали успехов. Может кто что подскажет? Ибо городить еще один девайс, который будет принимать I2C и передавать на ESP8266 совсем не комильфо :)
Мои поиски гуглом на предмет софтварного I2C, способного работать в режиме слейва не дали успехов.
Да ну? Первая ссылка в гугле, набросок, но уже старт: https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=i2c%20slave%20avr
Или надо готовое, прям чтоб вообще?