Ключевое ?лово

vk

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
Железо для умного дома

ТЕМА: Управление ЛЮБЫМИ I2C устройствами с помощью esp8266.

Управление ЛЮБЫМИ I2C устройствами с помощью esp8266. 27 Янв 2015 10:59 #1211

  • Adminhs
  • Adminhs аватар
  • Не в сети
  • Администратор
  • Сообщений: 7195
  • Спасибо получено: 1114
  • Репутация: 194
В версии 0.0.9 появилась возможность управлять любыми i2c железками с помощью http get запросов. Можно считать так же и датчики, которые не реализованы в прошивке.

Данная возможность дает внешним скриптам например на PHP или на другом языке управлять i2c устройствами.

Если вы знаете как работает i2c,то алгоритм команд для вас будет понятен без проблем..

Адрес команды обращения к i2c устройствам http://ip_адрес/i2cgo.

Структура команды:
/i2cgo?adr=XX&set=YY&getlen=Z

Где:
  • XX - i2c адрес устройства.(шестнадцатеричное значение)
  • YY- байты,отправляемые устройству.(шестнадцатеричные значение).Можно передать до 10 байт. Параметр опускается, если нужно только считать данные
  • Z- длина принятых данных. Параметр getlen необязательный, опускается если нужно только отправить данные.

  • Пример устанавливает на PCF8574 с адресом 0х20 на всех выводах 1.
/i2cgo?adr=20&set=FF

Читаем состояние выводов:
/i2cgo?adr=20&getlen=1

Получаем калибровочные данные у BMP180 в регистре AA:
/i2cgo?adr=77&set=AA&getlen=2

Получаем сырые данные с датчика освещенности BH1750 с адресом 0x23:
/i2cgo?adr=23&set=23&getlen=2
Основной канал проекта в Telegram t.me/wifi_iot
Последнее редактирование: 27 Янв 2015 11:35 от Adminhs.
Администратор запретил публиковать записи гостям.
Спасибо сказали: MSapogov

Управление ЛЮБЫМИ I2C устройствами с помощью esp8266. 07 Фев 2015 16:56 #1456

  • rjlexx
  • rjlexx аватар
  • Не в сети
  • Новый участник
  • Сообщений: 2
  • Репутация: 0
Пытаюсь подключить esp8266(вариант прошивки b) к arduino nano по I2C. Вывод TX подключил к D4(SDA), RX к D5(SCL). В ардуино прошил пример Salve Reciever:
// 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()
{
  delay(5000);
  Wire.begin(44);                // join i2c bus with address #4
  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
}

Но, при обращении к ESP_IP/i2cgo?adr=44&set=FF через браузер в ответ возвращается ошибка:
ERROR:2.Adress:0x44

В модуле esp8266 надо как-то регистрировать I2C устройства или я неправильно подключил все?
Администратор запретил публиковать записи гостям.

Управление ЛЮБЫМИ I2C устройствами с помощью esp8266. 07 Фев 2015 19:02 #1460

  • Adminhs
  • Adminhs аватар
  • Не в сети
  • Администратор
  • Сообщений: 7195
  • Спасибо получено: 1114
  • Репутация: 194
Надо в шестнадцатиричном виде указывать Wire.begin(0x44);
Основной канал проекта в Telegram t.me/wifi_iot
Администратор запретил публиковать записи гостям.

Управление ЛЮБЫМИ I2C устройствами с помощью esp8266. 14 Фев 2015 12:34 #1651

  • Evrey
  • Evrey аватар
  • Не в сети
  • Новый участник
  • Сообщений: 2
  • Репутация: 0
Добрый день.

Пытаюсь подключить датчик SH21, у него адрес 0x80 (0x81), в настройках прошивки такого адреса нет, если попытаться выполнить команду i2cgo?adr=80&set=F3, в ответ выдает ошибку ERROR:2.Adress:0x80.
Это означает что датчик подключен (запаян) неправильно, или в данной прошивке он не поддерживается?

Версия прошивки 0.0.9 А, плата esp8266 rev 1, подключил SDA - GPIO2, SCL - GPIO0
Настроек никаких в модуле не делал, ноги GPIO не переназначал.
Администратор запретил публиковать записи гостям.

Управление ЛЮБЫМИ I2C устройствами с помощью esp8266. 14 Фев 2015 13:21 #1654

  • Adminhs
  • Adminhs аватар
  • Не в сети
  • Администратор
  • Сообщений: 7195
  • Спасибо получено: 1114
  • Репутация: 194
Прошивке без разницы какой i2c железкой управлять, главно знать даташит на железку и делать необходимые запросы.

0x80 - это 8 битный, а надо 7 битный адрес указывать, .т.е. 0x40

Сканером i2с датчик видиться должен..
Основной канал проекта в Telegram t.me/wifi_iot
Администратор запретил публиковать записи гостям.

Управление ЛЮБЫМИ I2C устройствами с помощью esp8266. 16 Фев 2015 01:18 #1701

  • martiniman
  • martiniman аватар
  • Не в сети
  • Захожу иногда
  • Сообщений: 49
  • Спасибо получено: 6
  • Репутация: 0
Пробовал как описано ниже - сканер не видит ничего, а на подключенном к esp lcd1602 вылезают крякозябры (когда цепляю arduino).

Подскажите способ подключить ардуино по i2c.
rjlexx пишет:
Пытаюсь подключить esp8266(вариант прошивки b) к arduino nano по I2C. Вывод TX подключил к D4(SDA), RX к D5(SCL). В ардуино прошил пример Salve Reciever:
// 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()
{
  delay(5000);
  Wire.begin(44);                // join i2c bus with address #4
  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
}

Но, при обращении к ESP_IP/i2cgo?adr=44&set=FF через браузер в ответ возвращается ошибка:
ERROR:2.Adress:0x44

В модуле esp8266 надо как-то регистрировать I2C устройства или я неправильно подключил все?
Администратор запретил публиковать записи гостям.
Модераторы: FlyRouter
Время создания страницы: 0.147 секунд

Home`s Smart © 2013-2016. г.Киров.
Цитирование материалов возможно только со ссылкой на сайт. Использование фотоматериалов только с разрешения авторов.