ESP8266 I2C Slave

ramiress
Offline
Зарегистрирован: 28.03.2016

Всем привет.

Есть задача создать "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
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А что, ESP8266 умеет работать с I2C? Я как-то всегда через UART её использовал. Ну, слыхал, что плата LoLin ещё и SPI понимает, но про I2C никогда не знал. Подпишусь на тему, почитаю.

ramiress
Offline
Зарегистрирован: 28.03.2016

как мастер работает без проблем - проверено с 16*2 символьным

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Как мастер Вы программно I2C реализуете? Или аппаратно? Если аппаратно, то на каких пинах?

ramiress
Offline
Зарегистрирован: 28.03.2016

Аппаратная I2C имеет место быть

D1 - SCL

D2 - SDA

LoLin i2c

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

ЕвгенийП пишет:

А что, 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."

ramiress
Offline
Зарегистрирован: 28.03.2016

Мда, вот что в сообществе http://www.esp8266.com/ мне ответили :"ESP Wire library doesn't support Slave mode yet .."

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Спасибо, мужики. Теперь понятно, я то с младшими ESP модулями работал.

ramiress
Offline
Зарегистрирован: 28.03.2016

Мои поиски гуглом на предмет софтварного I2C, способного работать в режиме слейва не дали успехов. Может кто что подскажет? Ибо городить еще один девайс, который будет принимать I2C и передавать на ESP8266 совсем не комильфо :)

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

ramiress пишет:

Мои поиски гуглом на предмет софтварного I2C, способного работать в режиме слейва не дали успехов. 

Да ну? Первая ссылка в гугле, набросок, но уже старт: https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=i2c%20slave%20avr

Или надо готовое, прям чтоб вообще?