• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Связь Arduino и Nodemcu по i2c

sER

New member
Уважаемые форумчане, помогите разобраться:
Безымянный.png
Подключение сделал по следующей схеме (попробовал на уно и мега, работает (без резисторов на +5))
Код ардуино:
Код:
#include <Wire.h>
#include <iarduino_I2C_connect.h>
iarduino_I2C_connect I2C2;
const byte PIN_Potentiometer = 0;
int  VAR_Potentiometer = 0;
byte REG_Massive[3];
void setup(){
Wire.begin(0x02);
I2C2.begin(REG_Massive);
}
void loop(){
  VAR_Potentiometer = analogRead(PIN_Potentiometer);
  REG_Massive[1]    = VAR_Potentiometer>>8;
  REG_Massive[2]    = VAR_Potentiometer;
}

Код Nodemcu:
Код:
id=0
sda=4--Uno A4--Node D2--IO4
scl=5--Uno A5--Node D1--IO5

i2c.setup(id,sda,scl,i2c.SLOW)

function read_reg(dev_addr)
i2c.start(id)
i2c.address(id, dev_addr,i2c.RECEIVER)
c=i2c.read(id,2)
i2c.stop(id)
return c
end

reg = read_reg(0x02)
print(string.byte(reg))
В итоге получаю одно и тоже число 255
 

sER

New member
Код:
id=0
sda=2--Uno A4--Node D2--IO4
scl=1--Uno A5--Node D1--IO5
i2c.setup(id, sda, scl, i2c.SLOW)
function read_reg(dev_addr, reg_addr)
    i2c.start(id)
    i2c.address(id, dev_addr, i2c.TRANSMITTER)
    i2c.write(id, reg_addr)
    i2c.stop(id)
    i2c.start(id)
    i2c.address(id, dev_addr, i2c.RECEIVER)
    c = i2c.read(id, 1)
    i2c.stop(id)
    return c
end

-- get content of register 0xAA of device 0x77
reg = read_reg(0x2, 0x02)
print(string.byte(reg))
Вращая потенциометр получаю числа от 0 до 255
Как получить именно то, что передаёт ардуино (0-1023)
 

sER

New member
Master_Sender_bb.png
На ардуино вот так работает передача/приём (только у меня одно уно и одно мега)
Безымянный.png
Uno и Node соединил так.
Мне нужно разобраться как считать старший байт значения потенциометра (адрес 0x02, номер регистра 1) и
младший байт значения потенциометра (адрес 0x02, номер регистра 2)


С каких пор на есп разрешили подавать +5в?
Нужно соединять через преобразователь уровней 5-3,3?
Без имени-1.jpg
 
Последнее редактирование:

fandy

Member
1. Для i2c нужны подтягивающие резисторы к питанию (к 5 Вольтам у Вас).
2. У Вас в Ардуино
, то есть Ардуино у Вас slave по адресу 2
а а ESP
, то есть Вы читаете из устройства по адресу 0. Если я правильно понимаю, с этой библиотекой не работал.
 

sER

New member
Ардуино slave по адресу 2, верно.
На счёт id=0, как я понимаю, может выступать только в качестве master

i2c.setup()
####Описание
Инициализация i2c.

####Синтаксис
i2c.setup(id, pinSDA, pinSCL, speed)

####Параметры

  • id = 0
  • pinSDA: 1~12, IO index
  • pinSCL: 1~12, IO index
  • speed: i2c.SLOW
####Возвращаемые значения
speed: установленная скорость.
 

fandy

Member
Да, второй вопрос снят. Там вроде все верно.
Резисторы припаяйте.
 
Сверху Снизу