• Система автоматизации с открытым исходным кодом на базе 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
Да, второй вопрос снят. Там вроде все верно.
Резисторы припаяйте.
 
Сверху Снизу