Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno

ESP8266 NodeMCU. I2C. BME280 — Avislab

Пример работы ESP8266 (NodeMCU) с датчиком атмосферного давления, температуры и влажности BME280. Датчик BME280 работает по шине I2C (IIC). Шину IIC будем использовать для одновременной работы с датчиком BME280 и дисплеем SSD1306. Напомню, что пример использования дисплея SSD1306 с библиотекой UG8 был приведен в статье ESP8266 NodeMCU. SSD1306. U8G.

Датчик BME280 и BMP280

BME280 — это миниатюрный цифровой модуль, который включает в себя датчик атмосферного давления, датчик температуры и гигрометр. Модель другого датчика — BMP280 очень похожа на BME280 и отличается тем, что не имеет гигрометра. Алгоритмы работы с этими датчиками почти идентичны. То есть, можно сказать, что BMP280 + гигрометр = BME280. Мы протестуем оба датчика.
Датчики BME280 и BMEP280 имеют несколько режимов работы (Sleep mode, Forced mode, Normal mode). Наиболее высокая точность достигается при работе в режиме Normal mode. Отдельно для давления, температуры и влажности можно устанавливать oversampling (1,2,4,8,16).Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno Чем больше oversampling тем точнее результаты измерений. Но тратится и больше времени для измерения. Также датчик имеет IIR_filter, который снижает шум в выходных данных.
Подробнее об этих режимах можно прочитать в документации к BME280 и BMP280.
Мы можем не беспокоиться обо всех настройках и режимах. Модуль bme280 NodeMCU по умолчанию настроит датчик для наиболее точной работы.
Полезные ссылки:
BME280 – датчик атмосферного давления с гигрометром
Полная документация по модулю NodeMCU bme280:
https://nodemcu.readthedocs.io/en/master/en/modules/bme280/

Функции роботы с BME280

NodeMCU имеет модуль для работы с датчиком BME280. Этот модуль надо включить во время сборки NodeMCU (https://nodemcu-build.com). Поскольку BME280 использует IIC (I2C), также следует включать модуль I2C.

Инициализация датчика выполняется функцией:
bme280.init (sda, scl [temp_oss, press_oss, humi_oss, power_mode, inactive_duration, IIR_filter])
sda — SDA pin
scl — SCL pin
(optional) temp_oss — Controls oversampling of temperature data.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno Default oversampling is 16x.
(optional) press_oss — Controls oversampling of pressure data. Default oversampling is 16x.
(optional) humi_oss — Controls oversampling of humidity data. Default oversampling is 16x
(optional) sensor_mode — Controls the sensor mode of the device. Default sensor more is normal.
(optional) inactive_duration — Controls inactive duration in normal mode. Default inactive duration is 20ms.
(optional) IIR_filter — Controls the time constant of the IIR filter. Default fitler coefficient is 16.
(optional) cold_start — If 0 then the BME280 chip is not initialised. Usefull in a battery operated setup when the ESP deep sleeps and on wakeup needs to initialise the driver (the module) but not the chip itself. The chip was kept powered (sleeping too) and is holding the latest reading that should be fetched quickly before another reading starts (bme280.startreadout()). By default the chip is initialised.

Во время инициализации указываются GPIO, которые будут использованы для линий SDA и SCL шины IIC.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno Остальные параметры указывать не обязательно. Обратите внимание, что отдельно выполнять инициализацию шины IIC не требуется.
Примечание: bme280.init() описана как deprecated и будет удалена в следующих версиях NodeMCU. В новых версиях надо будет использовать bme280.setup(), а инициализация IIC будет выполняться отдельно.
Для считывания данных с датчика и вычисления данных используют следующие функции:
bme280.baro() — Читает датчик и возвращает давление воздуха в гектопаскалях как целое число, умноженное на 1000 или ноль, когда считывания не удалось.
bme280.dewpoint() — Для заданной температуры и относительной влажности температура росы в виде целого числа, умноженного на 100.
bme280.humi() — Читает датчик и возвращает относительную влажность воздуха в процентах как целое число, умноженное на 100 или ноль, когда считывание не прошло успешно.
bme280.qfe2qnh() — для заданной высоты превращает давление воздуха в давление воздуха на уровне моря.
bme280.startreadout() — начинает считывания (преводит датчик в forced режим).Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno
bme280.temp() — Читает датчик и возвращает температуру в градусах Цельсия как целое число, умноженное на 100.
Подробнее о функциях для работы с датчиком BME280 можно прочитать здесь:
https://nodemcu.readthedocs.io/en/master/en/modules/bme280/

Пример работы с BME280

Схема подключения (для BME280 и BMP280 схема одинакова):

Пример считывания давления, температуры и влажности с датчика BME280:


-- BME280 Example
bme280.init(5, 6)
local P, T = bme280.baro()
tmr.delay(100000)
local P, T = bme280.baro()
local H, t = bme280.humi()
T = T/100
H = H/1000
print (P, T, H)

Примечание: Сразу после инициализации датчика bme280 я выполняю считывание и задержку на 0.1 секунду. Это необходимо, потому что первое считывание с датчика всегда не удачное (читай доку по датчику). Имеется в виду первое считывание после подачи питания.
Функция bme280.baro() возвращает давление в гектопаскалях и температуру. Перевести гектопаскалях в миллиметра ртутного столба можно следующим образом:
P * 0.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno 000750061683
Примечание: Обратите внимание, что используются расчеты с плавающей запятой. То есть, Вам нужно использовать прошивку NodeMCU float версии.
Как видите, считывать данные с датчика BME280 достаточно просто.

Пример работы с BMP280

Попробуем подключить датчик BMP280. У BMP280 нет гигрометра, поэтому мы будем считывать только давление и температуру:


-- BMP280 Example
bme280.init(5, 6)
local P, T = bme280.baro()
tmr.delay(100000)
local P, T = bme280.baro()
T = T/100
print (P, T)

BME280 + SSD1306

Теперь подключим к плате NodeMCU датчик BME280 и дисплей SSD1306 как показано на схеме (ниже будет объяснение почему так подключать не рекомендуется):

Обратите внимание, что датчик bme280 и дисплей SSD1306 работают по шине IIC, но мы подключаем их к разным GPIO выводам. NodeMCU позволяет указать какие GPIO будут использоваться как SDA, SCL для линии шины IIC. Но все ли так хорошо как кажется? Сколько отдельных шин IIC мы можем использовать? NodeMCU позволяет использовать только одну шину.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno (numDecimalPlaces or 0)
return math.floor(num * mult + 0.5) / mult
end
—Init BME280
bme280.init(5, 6)
local P, T = bme280.baro()
tmr.delay(100000)
function read_and_show()
—Init BME280
bme280.init(5, 6)
local P, T = bme280.baro()
local H, t = bme280.humi()
T = T/100
H = H/1000
print (P, T, H)
— IIC init for Display
local sda = 3
local scl = 4
local sla = 0x3c
i2c.setup(0, sda, scl, i2c.SLOW)
i2c.setup(0, sda, scl, i2c.SLOW)
— Display init
local disp = u8g.ssd1306_128x64_i2c(sla)
disp:begin()
— Set Font
disp:setFont(u8g.font_10x20)
disp:firstPage()
file.open(«t.MONO», «r»)
local xbm_data_t = file.read()
file.close()
file.open(«h.MONO», «r»)
local xbm_data_h = file.read()
file.close()
file.open(«p.MONO», «r»)
local xbm_data_p = file.read()
file.close()
repeat
disp:drawXBM( 8, 0, 12, 22, xbm_data_t )
disp:drawXBM( 7, 24, 15, 22, xbm_data_h )
disp:drawXBM( 0, 48, 29, 22, xbm_data_p )
disp:setFont(u8g.font_10x20)
disp:drawStr( 40, 16, round(T,1)..` C`)
disp:drawStr( 40, 38, round(H)..` %`)
disp:drawStr( 40, 60, round(P* 0.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno 000750061683, 0)..` mmHg`)
until disp:nextPage() == false
xbm_data_t = nil
xbm_data_h = nil
xbm_data_p = nil
collectgarbage()
end
read_and_show()
— Start timer
tmr.register(0, 5000, tmr.ALARM_AUTO, read_and_show)
tmr.start(0)

Вроде бы все работает — данные считаны и на дисплей выведены. Но на самом деле не совсем все в порядке. Дело в том, что сначала выполняется инициализация IIC для работы с датчиком, а когда выполняется инициализация шины IIC для дисплея, связь с датчиком теряется. Чтобы считать данные с датчика в следующий раз, надо снова выполнять переинициализацию шины IIC. А когда надо вывести данные на дисплей выполнять пере-инициализацию дисплея. От этого изображение на дисплее мигает. Выглядит не очень красиво. Вообще, так делать не рекомендую.
Шина IIC предусматривает подключение нескольких устройств (теоретически до 127). Соединим датчик и дисплей как показано на схеме:

Примечание: В модулях дисплея и датчика уже установлены подтягивающие резисторы для линий шины SDA и SCL, поэтому их добавлять не нужно.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno (numDecimalPlaces or 0)
return math.floor(num * mult + 0.5) / mult
end
— IIC init
local sda = 5
local scl = 6
local sla = 0x3c
i2c.setup(0, sda, scl, i2c.SLOW)
—Init BME280
bme280.init(sda, scl)
—bme280.setup()
local P, T = bme280.baro()
tmr.delay(100000)
— Display init
local disp = u8g.ssd1306_128x64_i2c(sla)
disp:begin()
— Set Font
disp:setFont(u8g.font_10x20)
function read_and_show()
local P, T = bme280.baro()
local H, t = bme280.humi()
T = T/100
H = H/1000
print (P, T, H)
disp:firstPage()
file.open(«t.MONO», «r»)
local xbm_data_t = file.read()
file.close()
file.open(«h.MONO», «r»)
local xbm_data_h = file.read()
file.close()
file.open(«p.MONO», «r»)
local xbm_data_p = file.read()
file.close()
repeat
disp:drawXBM( 8, 0, 12, 22, xbm_data_t )
disp:drawXBM( 7, 24, 15, 22, xbm_data_h )
disp:drawXBM( 0, 48, 29, 22, xbm_data_p )
disp:setFont(u8g.font_10x20)
disp:drawStr( 40, 16, round(T,1)..` C`)
disp:drawStr( 40, 38, round(H)..` %`)
disp:drawStr( 40, 60, round(P* 0.000750061683, 0)..` mmHg`)
until disp:nextPage() == false
xbm_data_t = nil
xbm_data_h = nil
xbm_data_p = nil
collectgarbage()
end
read_and_show()
— Start timer
tmr.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno register(0, 5000, tmr.ALARM_AUTO, read_and_show)
tmr.start(0)

Примечание: bme280.init() описана как deprecated и будет удалена в следующих версиях NodeMCU. В новых версиях надо будет использовать bme280.setup(). bme280.setup() не занимается инициализацией шины IIC, это технически правильно, а занимается лишь настройками датчика. То есть если раньше мы писали:


bme280.init(5, 6)

Теперь нужно:


i2c.setup(0, 5, 6, i2c.SLOW)
bme280.setup()

В этой статье мы рассмотрели пример работы с датчиком атмосферного давления, температуры и влажности BME280 и пример работы с датчиком атмосферного давления и температуры BMP280. Для работы с датчиками использовалась плата NodeMCU c модулем ESP-12E. Плата работает под управлением Framework NodeMCU. Примеры написаны на языке программирования LUA.
Скачать все файлы, использованные этой статье можно по следующей ссылке:
https://github.com/avislab/NodeMCUExamples/tree/master/BME280_BMP280
Желаю успехов.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno

Смотри также:

Высокоскоростной модуль NodeMCU ESP8266 I2C

Я делаю беспроводное устройство для измерения магнитного поля на основе магниторезистивного датчика HMC5983 и модуля ESP8266 (NodeMCU ESP-12e).

Датчик подключен к ESP8266 по интерфейсу I2C.
ESP8266 опрашивает датчик и отправляет его в сборщик данных (Raspberry Pi).

Для меня чрезвычайно важно добиться максимально возможного количества вычислений за секунду, так как от этого зависит качество полученных данных для последующей обработки.

HMC5983 поддерживает интерфейс I2C в стандартном, быстром и высокоскоростном режимах. Но модуль NodeMCU I2C поддерживает только скорость i2c.SLOW.

распространенными скоростями шины I2C являются стандартный режим 100 кБит/с и
низкоскоростной режим 10 Кбит/ с https://en.wikipedia.org/wiki/ I%C2%B2C

Затем я подключил HMC5983 непосредственно к Raspberry Pi через I2C. Я мог бы достичь около 500 измерений в секунду (контролируя вывод прерывания DRDY) в режиме одиночного измерения и 200 измерений в секунду в режиме непрерывного измерения (со скоростью вывода данных на частоте 220 Гц-все в порядке).Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno
Программа была написана в Python году, вот код:

#!/usr/bin/python
import smbus #for i2c use
import time
import os

bus = smbus.SMBus(1) #use i2c port 1 on Rasspberry Pi
addr = 0x1e #address HMC5983 0x1E

bus.write_byte_data(addr,0x00,0b00011100) #Write to CRA Speed 220Hz
bus.write_byte_data(addr,0x01,0b00100000) #Write to CRB Gain 660 +-2.5Ga 1.52mG/Lsb

print "Start measuring.....
while True: #if we need infinity cycle
    bus.write_byte_data(addr,0x02,0b00000001) #Write to Mode single-measurement mode
    while bus.read_byte_data(addr,0x09) == 0b11: #Wait RDY in Status Register
       ()
    #DATA READY    
    data = bus.read_i2c_block_data(addr,0x03,6)#Take data from data registers
    #convert three 16-bit 2`s compliment hex value to dec values and assign x,y,z
    x = data[0]*256+data[1]
    if x > 32767 :
        x -= 65536
    y = data[2]*256+data[3]
    if y > 32767 :
        y -= 65536
    z = data[4]*256+data[5]
    if z > 32767 :
        z -= 65536  
    print "X=",x, "\tY=",y, "\tZ=",z

Когда я подключил HMC5983 к ESP8266, я смог выполнить только около 140 вычислений в секунду в режиме одного вычисления.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno

----------THIS IS FOR SINGLE-MEASUREMENT MODE-------------
--init i2c
function H_init(sda,scl)
    i2c.setup(id, sda, scl, i2c.SLOW)
    print("I2C started...")
end
-- reads 6byte from the sensor
function read_axis()
    i2c.start(id)
    i2c.address(id, dev_addr, i2c.RECEIVER)
    data = i2c.read(id, 6)
    i2c.stop(id)
    return data
end
--set register
function set_reg(reg_addr,val)
    i2c.start(id)
    i2c.address(id, dev_addr, i2c.TRANSMITTER)
    i2c.write(id,reg_addr)
    i2c.write(id,val)
    i2c.stop(id)
end
--------GPIO INITILIZATION-------
drdyn_pin=3
gpio.mode(drdyn_pin, gpio.INPUT)
-------I2C INITILIZATION-------
id = 0
i2c = i2c
local i=0
dev_addr = 0x1e
H_init(1,2)
set_reg(0x00,0x1c) --set speed 220Hz
set_reg(0x01,0x20) --set gain
print("Start measurement...")
while true do
    set_reg(0x02,0x01) --single-measurement mode
    while(gpio.read(drdyn_pin) == 1) do
    end
    data = read_axis()
    tmr.wdclr()
end

После этого я настроил датчик на непрерывный режим измерения и получил те же 200 измерений в секунду.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno

Возможна ли работа интерфейса I2C в NodeMCU на высоких скоростях? Может ли кто-нибудь сказать мне, как попытаться ускорить опрос датчиков?

raspberry-pi

i2c

esp8266

nodemcu

Поделиться

Источник


fominraos

11 декабря 2016 в 17:11

1 ответ


  • Как запустить Node.js на esp8266 (NodeMCU dev board)?

    Я пытаюсь подключить Apple homekit к плате nodemcu, я нашел учебник, который работает на моем компьютере, но мне интересно, есть ли какой-нибудь способ загрузить и запустить Node.JS на плате NodeMCU (ESP8266)?

  • NodeMCU и ESP8266: медленная публикация mqtt

    Я использую esp8266 с прошивкой, произведенной с помощью NodeMCU пользовательских сборок Марселя http://frightanic.com/nodemcu-custom-build/ я протестировал ветку dev и master. Я немного изменил код Connect to MQTT Broker , найденный здесь https://github.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno com/nodemcu/nodemcu-firmware — init mqtt…


1

Конечно, это возможно, ESP8266 быстрее Pentium 🙂 Всего несколько тысяч или даже несколько десятков тысяч измерений в секунду были бы действительно разочаровывающими для такой огромной вычислительной мощности. Вот вам ссылка на библиотеку ESP8266 I2C, написанную в assembly и протестированную с помощью Arduino toolchain. Таким образом, вы можете общаться со скоростью 800000 сообщений в секунду @80 MHz или один миллион сообщений в секунду @160 MHz. Я считаю, что этого было бы более чем достаточно для проекта, который вы описали, при скорости 80 kHz I2C вы можете иметь несколько десятков тысяч измерений в секунду — если ведомое устройство может справиться с такой скоростью.

Для любых будущих сомнений в том, что что-то можно или нельзя сделать с ESP8266, я бы сказал, что этого более чем достаточно, чтобы получить картину — и в данном случае я имею в виду это буквально 🙂

Поделиться


Chupo_cro

13 декабря 2016 в 07:31


Похожие вопросы:

Связь ESP8266 с ESP8266 i2C

Я пытаюсь подключить свой ESP8266 и отправлять сообщения по шине i2c.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno Я использую доску разработки NodeMcu. Контакты D1,D2 и GND соединены друг с другом. Код на моем хозяине таков : #include…

Интерфейс NodeMCU (ESP8266) с модулем GSM

Я новый пользователь NodeMCU, и я хотел бы, чтобы он общался с модулем GSM, таким как SIM900. Могу ли я использовать второй UART terminal ESP8266 для взаимодействия с модулем GSM? Спасибо.

ESP8266-NodeMCU в режиме stationap

Есть ли способ перевести NodeMCU в режим STATIONAP и общаться между двумя сетями (сетью, в которой esp8266 является точкой доступа, и сетью, в которой esp8266 является станцией)? Спасибо

Как запустить Node.js на esp8266 (NodeMCU dev board)?

Я пытаюсь подключить Apple homekit к плате nodemcu, я нашел учебник, который работает на моем компьютере, но мне интересно, есть ли какой-нибудь способ загрузить и запустить Node.JS на плате NodeMCU…

NodeMCU и ESP8266: медленная публикация mqtt

Я использую esp8266 с прошивкой, произведенной с помощью NodeMCU пользовательских сборок Марселя http://frightanic.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno com/nodemcu-custom-build/ я протестировал ветку dev и master. Я немного изменил код…

Невозможно использовать функцию math.pow в NodeMCU/ESP8266

Мне нужна функция math.pow в NodeMCU/ESP8266, но я не могу включить математическую библиотеку

Что такое пропускная способность ESP8266 NodeMCU

Я сравниваю беспроводные технологии, такие как Zigbee и WiFi. Я купил модуль Zigbee, который имеет пропускную способность 256 Кбит / с, но фактическая пропускная способность составляет менее 30 Кбит…

ESP8266/NodeMCU Android IDE

Я только что получил NodeMCU dev kit для ESP8266, и я хочу разработать для него свой телефон motox2013 Android. Есть какие-нибудь идеи о том, как я могу это сделать? Я знаю, что уже есть Android IDE…

Синий индикатор на NodeMCU Esp8266 не мигает

Синий свет на этом Esp8266 раньше был flash синим, когда он был подключен. Теперь он мигает один раз, когда подключен к сети, а потом вообще не мигает.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno После запуска мигалки…

NodeMCU ESP8266 WiFi низкий уровень мощности RF

Я протестировал прошивку NodeMCU на 4 модулях ESP8266, и у меня есть проблема с диапазоном WiFi модулей (всего 8 метров). Я попытался переключиться на прошивку ядра Arduino ESP8266 и вуаля, модули…

Подключение датчика температуры, влажности и давления BME280 к ESP8266 — kvvhost

Схема подключения BME280 к ESP8266 или ESP32

Для примера возьмем плату Node MCU и датчик BME280. Для ESP32 принцип тот же.

Подключим по следующей схеме:

VIN — 3V3 NodeMCU

GND — GND NodeMCU

SDA — D6 NodeMCU (GPIO12)

SCL — D5 NodeMCU (GPIO14)

Я использую прошивку ESPHome, поэтому все настройки для примера буду проводить именно в ней.

Добавляем в конфиг esphome пины i2c:

i2c:
  sda: D6
  scl: D5
  scan: True

И смотрим лог esphome на предмет i2c адреса датчика.

Распознался адрес bme280 — 0x76

Теперь добавляем в конфиг esphome данные датчика, с указанием адреса:

sensor:
  - platform: bme280
    temperature:
      name: "bme280_temperature"
      oversampling: 16x
    pressure:
      name: "bme280_pressure"
    humidity:
      name: "bme280_humidity"
    address: 0x76
    update_interval: 60s

И можно загружать прошивку.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno

Как видно по логу, данные о температуре, влажности и давлении успешно считываются.

Полный конфиг для esphome выглядит следующим образом:

esphome:
  name: nodemcu
  platform: ESP8266
  board: nodemcuv2

wifi:
  ssid: 'ssid'
  password: 'password'

logger:

api:
  password: "nodemcu"

ota:
  password: "nodemcu"

i2c:
  sda: D6
  scl: D5
  scan: True

sensor:
  - platform: bme280
    temperature:
      name: "bme280_temperature"
      oversampling: 16x
    pressure:
      name: "bme280_pressure"
    humidity:
      name: "bme280_humidity"
    address: 0x76
    update_interval: 60s


В Home Assistant добавляем через Настройки > Интеграции > ESPHome

Данное исполнение датчика дает нам возможность изменить его i2c адрес.

Для этого нужно аккуратно перерезать дорожку, соединяющую левый и центральный контакт.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno

Затем соединяем центральный и правый контакт. Адрес i2c изменится с 0x76 на 0x77

5
1
голос

Рейтинг статьи

NODEMCU LUA ESP8266 с ЖК-дисплеем I2C 128 x 64 OLED: 4 шага

Управлять дисплеем I2C 128 x 64 OLED относительно легко с ESP8266, поскольку библиотека уже встроена в NodeMCU. Поскольку требуются только 2 выхода, ESP01 также может управлять этим дисплеем. На ESP8266 I2C конфигурируется для любых выводов ввода / вывода. Я использовал GPIO 0 и 2 для обеспечения совместимости со всеми платами.





Расходные материалы:

Шаг 1: Графический тест

Эта программа показывает некоторые функции, встроенные в NodeMCU Lua из u8g, и способ использования tmr.alarm (). Более подробную информацию можно найти здесь.

Шаг 2.

Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno Отображение растрового изображения

Эта программа показывает, как загружать растровые изображения и отображать их на экране. Растровые изображения должны быть загружены в ESP8266, как показано на рисунке.





Изображения были преобразованы с помощью этого графического редактора. Выберите MONO из выпадающего списка и нажмите кнопку «Выбрать формат». На следующем экране «Выберите файл», а затем «Конвертировать и скачать». Файлы возвращаются с расширением .MONO — измените это на xbm. Я использовал файлы PNG уже в 128 х 64 пикселей (это можно сделать с помощью программы рисования Microsoft).

ПРИМЕЧАНИЕ для полноты, я включил оригинальные файлы .png в сжатый файл, они не нужны для программы Lua (используйте для этого файлы .xbm)





Шаг 3: прокрутка текста

Эта программа прокручивает текст «Hello World» с левого верхнего до правого нижнего края экрана. Изменение таймера на значение, намного меньшее 250, приводит к зависанию программы и сбросу ESP.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno Вам нужно установить шрифт, прежде чем пытаться распечатать на экране, в противном случае вы получите одну из тех ошибок, которые, кажется, не имеют хорошего описания того, что не так. (например. дисп: SetFont (u8g.font_6x10) ).

Шаг 4: Дополнительная информация





В настоящее время появляется все больше и больше программ Lua. Я написал свои программы из кусочков, найденных в Интернете, и методом проб и ошибок. Это могут быть не самые элегантные программы, но они работают и надеются, что они помогут другим с их идеями.

Другая программа, которая может быть полезна, может быть найдена здесь.

Метеостанция на ESP8266 и двух датчиках BME280 для двух точек измерения — Arduino

Всем привет, в этой статье поговорим об уже надоевшей всем теме — «Метеостанция». Каждый пытается сделать что-то свое, вот и я не стал исключением и попытался материализовать свои эротические фантазии на контроллере ESP8266. Тема задумывалась уже давно как некое обновление для предыдущего проекта этой тематики, но из-за своей неспешности переросла в нечто самостоятельное.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno

При всей привлекательности микроконтроллера ESP8266 с его большим объемом памяти, железной поддержкой Wi-Fi и массой разных плюшек, он не лишен недостатков. Самый основной — ограниченное количество поддерживаемых одновременных TCP соединений равное 5. Если превысить этот лимит, то контроллер потеряет связь с окружающим миром, при этом watchdog будет думать, что все в порядке, а следовательно, даже не попытается нам помочь. Будем стараться это помнить!

Стоит начать с концепции

Доступ к данным метеостанции нужно получать без установки внешних приложений и под любой операционной системой. Для этих целей подойдет практически любой современный браузер. Меня всем устраивает Chrome.

Раз уж за основу взят HTTP протокол, стоит озаботиться экономией трафика и ограничением числа TCP соединений. Хорошим тоном будет передача всего необходимого для формирования страницы контента только при первом обращении, а все последующие операции, такие как отображение показаний с датчиков или настройку контроллера, производить через API.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno В этом нам поможет JQuery.

А вот, чтобы ослабить болевые ощущения от передачи файлов с SPI Flash в браузер, стоит предусмотреть систему кэширования, например, Etag. Это позволит отдавать тяжелый контент единожды, а при последующих загрузках страницы просто подтверждать его актуальность на уровне Web сервера микроконтроллера и кэш браузера вступит в игру, неимоверно уменьшив время загрузки страницы! «Вы были правы в одном, Мастер: переговоры были недолгими.» © Звездные войны. Эпизод 1

Из-за того, что метеостанция с датчиками и контроллером должна располагаться на улице, жизненно необходимо предусмотреть возможность обновлять прошивку ESP через Web интерфейс.

Аналогичным образом должны обновляться файлы Web сервера расположенные на SPI Flash. Этот и предыдущий пункт вкупе позволят обновлять функционал микроконтроллера из домашней сети или из интернета, если конечно в этом возникнет острая необходимость.

Чтобы никто посторонний не могу вмешаться в работу устройства или изменить файлы Web сервера, последний должен хотя бы как-то себя защищать.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno Пускать в панель управления только после авторизации, блокировать доступ при попытках брутфорса пароля. В конце концов, контроллер обязан самостоятельно генерировать ключи (salt) для авторизации, дабы сделать алгоритм непредсказуемым и исключить потенциальный взлом, в случае если злодей завладеет исходниками проекта. Понятно, что кому она там нужна, эта метеостанция, если её не завязывать с умным домом, если только из-за спортивного интереса, но как говориться “Береженого Бог бережет”.

Датчики стоит расположить по уму — в метеобудке, а вот контроллер в сухом и закрытом боксе. Объединить их между собой, как мне кажется, удобнее по I2C шине — минимум проводов, максимум удобства.

Практически на всех вариантах плат ESP-xx имеется штатный светодиод, можно воспользоваться им как для индикации режимов и состояния микроконтроллера, так и для вывода какой-либо промежуточной информации.

Что касаемо режимов работы ESP8266, как ни странно, но он должен находить домашнюю Wi-Fi сеть и подключаться к ней.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno Если вдруг звезды не были к нам благосклонны, и домашняя беспроводная сеть приказала долго жить, контроллер обязан перейти в режим точки доступа (AP) дабы к нему можно было подключиться с какого-либо устройства и перенастроить его на другую сеть. А вот пока последнее не произошло, ESP должен периодически сканировать эфир в поисках долгожданной домашней точки доступа и, если боги были к нам милосердны, и домашняя сеть появилась в эфире, незамедлительно переключиться в режим клиента (STA) и в пылу страсти воссоединиться с ней.

Ну и естественно, как же без отправки данных на внешние ресурсы, сейчас без этого не обходится ни одна уважающая себя кофеварка, не говоря уже о метеостанции. Думаю, что основным блюдом станет протокол MQTT, это уже облегчает возможность интеграции с умным домом, стулом или той же кофеваркой. Ну а на закуску добавим поддержку «ThingSpeak» и «Народного мониторинга». При желании можно нарастить функционал, благо памяти у микроконтроллера еще много.

Как я себе это представляю

Учтите, что на видео, данные с датчиков, эмитируются самим микроконтроллером, это нужно для наглядности.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno В жизни метеорологическая обстановка намного спокойнее слава Богу.

Перейдем к физической сборки устройства

Как по мне, так самый оптимальный вариант, это воспользоваться отладочной платой NodeMCU V3 и базой для неё. Таким образом, мы получим отличный комплект с разведенной на его борту всей необходимой обвязкой и возможностью питать устройство от 5 до 24 Вольт.

Отладочная плата на базе, и смотрится хорошо, и удобства хоть отбавляй.

Заливаем прошивку, образ SPI Flash и подключаем четырьмя проводами датчики. Справится даже ребенок.

Ссылки:

Базовая плата для NodeMCU V3 с преобразователем питания 5-24V в 5V

Отладочная плата ESP8266 от NodeMCU

Естественно никто не запрещает Вам развести свою плату. Если Вы это сделаете, скиньте нам свое творение, возможно мы перейдем на него. В идеале, все должно размещаться в метеобудке.

Датчики взятые за основу

Теперь настал момент озаботиться, где описанные выше ребята будут жить. В прошлый раз мы использовали для этих целей, найденную в подножном корме, электрическую распределительную коробку.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno Кроме дешевизны в этом решении нет ничего положительного.

В этот раз мы воспользуемся более серьезным вариантом – «Метеорологическая будка Стивенсона». Она способна защитить датчики от прямых воздействий окружающей среды, но при этом имеет открытую структуру со стенками в виде жалюзи. Удобно, красиво и самое главное – правильно!

Будка печатается на 3D принтере по эскизам опубликованным на Thingiverse неким kowomike, спасибо добрый человек! Архив с эскизами можно будет скачать в конце поста.

Фото готовой будки

Шпилька М8 крепится через зажимной хомут к мачте уличной антенны.

Примерка. Шпилька практически не укорачивалась, чтобы не закрывать будку параболической Wi-Fi антенной.

Хотя в моем случае все это сделано не правильно т.к это солнечная сторона дома. Доступа на теневую сторону дома у меня нет, поэтому приходиться довольствоваться тем, что имеем. По прошлой метеостанции мне говорили «на солнечной стороне все эти измерения — сферический конь в вакууме, слепи %описание-многА-букАв% и закрепи на теневой стороне дома».Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno

Я пока живу в панельном многоквартирном доме, как и не малая часть нашей страны. Доступ к теневой стороне дома (а для меня, по факту, это окна в подъезде) — прямой вызов всем гопникам района трущимся рядом, любопытным соседям с бегающими глазками и всей элите человечества скрашивающей фоном мою унылую и слишком простую, по их мнению, жизнь. Думаю, что мысль я донес.

Датчики располагаются на разных уровнях. В основании находится датчик освещенности Bh2750 и смотрит ровно вниз. Мне кажется, так он будет меньше пачкаться и покрываться пылью и при этом смотреть наружу сквозь минимальное количество препятствий для солнечного света. Вообще размещение этого датчика, это целая головная боль. Как не крути, все будет не то. Оставил так, ведь по сути важны не сами показания, а тенденция изменения. Хотя кого я пытаюсь обмануть, точность важна всегда! Предлагайте свои варианты.

Намного проще обстоят дела с датчиком атмосферного давления BMP180 и влажности SI7021, кстати, с последнего мы также будем забирать данные о температуре.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno Их размещаем в оставшемся свободном пространстве будки, благо его там с избытком, но не в конусе т.к пространство в нем менее проветриваемое.

Все хозяйство подключается между собой следующим образом

NodeMCU | ESP 07/12 | Датчики
——————————
D2 | GPIO 4 | SDA
D1 | GPIO 5 | SCL
3.3V | 3.3V | 3.3V
GND | GND | GND

ВАЖНО: при финальном монтаже устройства на его место службы, обязательно установите перемычку между пинами GPIO 0 (D3) и питанием 3.3 Вольта. Причины её установки описаны в закрепленном сообщении с описание обновления от 12.08.2017.

Сам микроконтроллер будет спрятан в уже знаменитую распределительную коробку, закрепленную на шпильке, чуть ниже будки Стивенсона. У меня все находится на стадии неторопливой сборки с попутным поиском более удачных идей.

Плата расширения, на которой будет установлена плата NodeMCU, закреплена через ножки для крепления компьютерных материнских плат в корпусах.

Разъемы для подключения внешних датчиков и питающей линии установил на местах где была пара штатных заглушек.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno Закрепил все через переходную пластину, выпиленную из куска фольгированного текстолита. Естественно, предварительно пластина была протравлена, а вся медь искоренена, ибо в этом случае она нам не друг.

Также была предусмотрена проставка из полиэтиленового поролона (используется в качестве упаковочного материала при транспортировке грузов) между текстолитом и корпусом, общей толщиной 5мм, а после затяжки крепежных винтов, его толщина не превышает 1мм. Это было сделано из-за опыта эксплуатации предыдущего (временного) бокса для этой метеостанции. Без проставки влага быстро найдет путь вовнутрь, и срок службы устройства снизится.

Производим примерку.

При окончательном монтаже обязательно необходимо удалить все не плотно прилегающие части полиэтиленового поролона, то есть те части, которые располагаются снаружи и не сдавлены крепежной текстолитовой пластиной. Это необходимо сделать для препятствования накоплению влаги в доступных для неё полостях. Также пришлось увеличить число крепежных болтов для более надежного прилегания текстолита, в противном случае он может выгибаться.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno

Все самое сложное позади, остается только вывести на один разъем шину i2c с питание 3.3 Вольта, а на другой подвести пины питания платы расширения. Но т.к у меня валялся «хвост» отрезанный когда-то от не рабочего блока питания маршрутизатора, и я не побрезговал им воспользоваться по прямому назначению.

Далее останется все подравнять, проверить качество монтажа, возможность замены платы NodeMCU, если это будет необходимо при эксплуатации и самое главное, дважды проверить, что и куда припаяно. Мои кривые руки и невнимательность уже наказывали меня, а т.к ждать новые запчасти долго, повторять не хочется.

Общий вид получился таким

А вот как все выглядит в боевых условиях. Кстати, могу предложить идею с помещением в бокс мешочка содержащий впитывающий влагу гель, они часто встречаются в коробках с обувью. Если все герметично, то он впитает остатки влаги, а если нет, то лишним уж точно не будет.

Требования (!!!Читать обязательно!!!)

Arduino IDE с поддержкой контроллера ESP8266, версия 2.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno 6.2 (на версиях выше работоспособность не проверялась)

Установленный модуль в Arduino IDE для загрузки файлов во Flash память микроконтроллера. Как установить описано тут.

Для работы модуля загрузки файлов во Flash может понадобится последняя версия Python https://www.python.org/downloads/

Любой модуль на базе ESP8266 c Flash 4MB (3MB выделяем под SPIFFS)

В параметрах выставляем lwIP версии 2 и максимальную производительность (lwIP v2 Higher Bandwidth)

Сам архив с последней версией проекта. Скачать можно в конце статьи или по этой ссылке.

  

Обязательные библиотеки (!!!Читать обязательно!!!)

ArduinoJson (v5.13.5)

PubSubClient

Ссылки на библиотеки сенсоров указаны в комментариях к коду. Сами библиотеки, как и обслуживаемые ими сенсоры, не являются обязательными. Вы вольны использовать любые датчики, как физические, так и программные.

Порядок установки (!!!Читать обязательно!!!)

Изучите файлы проекта с примерами использования тех или иных сенсоров.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno Все файлы с примерами начинаются с префикса users_, это users_auto.h, users_bme280_x2.h и т.д. Загрузите необходимые Вам библиотеки или используйте эти файлы как пример для добавления иных датчиков.

Выставите необходимые настройки для контроллера в среде разработки Arduino IDE. Пример настроек указан на скриншоте выше. Обязательно убедитесь, что выбрано правильное распределение места для внутренней файловой системы, это значит, что 3MB должно быть выделено под файловую систему. Также проверяем, чтобы использовался lwIP v2 в режиме максимальной производительности (lwIP v2 Higher Bandwidth).

Произведите загрузку программы с помощью среды разработки (Ctrl + U).

Произведите загрузку содержимого каталога data в файловую систему. Меню/Инструменты/ESP8266 Sketch Data Upload

Перед тем как устанавливать метеостанцию на постоянное место жительства, подтянуть GPIO-0 (пин D3 на плате NodeMCU) к питанию 3.3V. Во время данной процедуры, питание на контроллере должно отсутствовать.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno

Первый запуск (!!!Читать обязательно!!!)

Помните, что вся конфигурация микроконтроллера производится исключительно через web интерфейс. Никаких изменений значений тех или иных параметров в коде не требуется, а подобную практику будем считать плохим тоном.

И так, после запуска микроконтроллера он сразу перейдет в аварийный режим и поднимет собственную точку доступа с именем WeatherStation. Это нормальное поведение т.к подразумевается использование метеостанции в домашней беспроводной сети, ну а раз о ней пока ничего не известно, то и подключаться не к чему.

Подключитесь к данной сети с любого удобного устройства и перейдите в панель управления (для этого имеется соответствующая иконка, запутаться невозможно), контроллер будет доступен по адресу http://espws.local или http://192.168.4.1 При попытке входа в панель управления будет запрошено имя пользователя и пароль, по умолчанию admin/admin. После входа в панель управления перейдите в раздел «Основные настройки WiFi» и укажите имя и пароль Вашей домашней сети, а также, при необходимости, укажите пароль для подключения к точке доступа поднимаемой контроллером в аварийном режиме.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno Если все сделано правильно, то контроллер подключится к домашней сети в течении 5-и минут.

Если Ваша домашняя сеть скрыта, то после первоначальной настройки необходимо перезагрузить контроллер. Это необходимо из-за частичной поддержки работы со скрытыми сетями. После перезагрузки контроллер увидит Вашу сеть и запомнит её MAC адрес. Помните об этом если захотите сменить домашний маршрутизатор.

Хотите помочь проекту или спонсировать новый?

Yandex.Money

PayPal.me

Файлы

 

Увеличение количества входов/выходов микроконтроллеров ESP8266/ESP32/Arduino

У Arduino количество входов в старших версиях (Arduino Mega) значительное, однако само устройство все-же больше заточено под прототипирование и выпуск IoT устройств в небольших количествах. Быстро и недорого заткнуть брешь. Этот вариант пригоден далеко не для всех задач, особенно когда нужно развертывать сотни IoT устройств.

На Arduino довольно удобно разрабатывать. Есть Aruino IDE, несложный вариант C++, поддержка в среде Visual Studio Code/Visual Studio 2017.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno Накоплена огромная экспертиза, множество штатных библиотек, закрывающих многие задачи, масса форумов, статей и т.п. Однако, к сожалению, если нужно сделать удаленное обновление прошивки, нормального штатного решения для Arduino мне найти не удалось. Нестандартные bootloader разрабатывались давно, обновлений кода нет и насколько стабильно работают, непонятно.

Микроконтроллеры ESP8266 и старший собрат ESP32 — это промышленные микроконтроллеры, отлично документированные с штатной поддержкой обновления программного обеспечения по TCP/IP.

Если разрабатывается решение для промышленной автоматизации, то рекомендую использовать чипы ESP. Будет хороший задел на будущее в части дальнейшего развития. Учитывая то, что код под ESP можно создавать на С++ в среде Arduino IDE/Visual Studio Code/2017, а многие библиотеки совместимы между Arduino и ESP, в случае необходимости можно перейти с ESP на Arduino. Естественно, с потерей функционала Wi-Fi, который встроен в ESP, а в Arduino требуется дополнительный shield.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno Например, тот-же самый ESP8266. 🙂

В чипах ESP уже встроена поддержка Wi-Fi и Bluetooth (ESP32), есть режимы пониженного энергопотребления, что упрощает разработку устройств работающих от аккумулятора.

Электропитание ESP8266/ESP32

Для автономного электропитания рекомендую используется емкий Li-Ion аккумулятор 18650. На Aliexpress можно найти варианты аккумулятора на 9900 mAh. Скорее всего китайцы лукавят, ставя эту цифру, но батарея действительно емкая.

К ней несложно найти недорогой battery shield для питания устройств на этих микроконтроллерах. Есть и недорогие пассивные battery case для случая, когда управление Li-Ion аккумулятором реализованно на отдельном shield. Например, для платы Wemos D1 mini есть такой вариант shield.

ESP8266 vs ESP32

Вкратце сравню ESP8266 с ESP32.

ESP8266

ESP32

MCU

Xtensa Single-core 32-bit L106

Xtensa Dual-Core 32-bit LX6 with 600 DMIPS

802.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno 11 b/g/n Wi-Fi

HT20

HT40

Bluetooth

X

Bluetooth 4.2 and BLE

Typical Frequency

80 MHz

160 MHz

SRAM

X

Flash

X

GPIO

17

36

Hardware /Software PWM

None / 8 channels

None / 16 channels

SPI/I2C/I2S/UART

2/1/2/2

4/2/2/2

ADC

10-bit

12-bit

CAN

X

Ethernet MAC Interface

X

Touch Sensor

X

Temperature Sensor

X

Hall effect sensor

X

Working Temperature

-40ºC to 125ºC

-40ºC to 125ºC

Price

$ (3$ — $6)

$$ ($6 — $12)

Where to buy

Использовать GPIO входы/выходы на этих чипах можно по-разному.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno

Функциональное назначение выводов чипа ESP8266.

При приобретении ESP32 devkit на Aliexpress нужно обращать внимание на количество PIN-ов. Наиболее распространенный вариант — 30 PIN-овый, такой-же как ESP8266. Он стоит в районе 5 USD. Есть вариант на 36 PIN и 38 PIN. На 38 PIN стоит в районе 8 USD. Отличить легко, PIN-ы опускаюся до нижнего края кнопок.

Здесь уже нужно смотреть, что нужно от платы, поскольку може оказаться выгоднее приобрести расширение на 16 GPIO за 1,5 USD, чем переплачивать за PIN-ы на devkit.

Функциональное назначение выводов чипа ESP32 с 36 PIN-ами

В ESP32 встроен ряд датчиков, которые можно использовать при разработке простых решений. Например, можно периодически опрашивать датчик температуры для мониторинга состояния «здоровья» самого чипа, чтобы не допускать его перегрева.

У ESP32 можно использовать 10 входов в качестве емкостных (TOUCH). Присоединенный к ним провод будет изменять емкость при поднесении руки. Например, можно реализовать вечные емкостные кнопки, которые могут быть реализованы на печатной плате, без использования механических компонент.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno

Увеличение количества аналоговых входов/выходов

Аналого-цифровой преобразователь АЦП (ADC)

В ESP8266 только один АЦП (ADC), в то время как в ESP32 доступно 18!!! АЦП, причем 12 битных, в отличие от 10-ти битного АЦП ESP8266. Напряжение срабатывания АЦП в ESP32 можно менять от 0 до 4 V.

I2C адресация модуля ADS1115

16-ти битные внешние модули АЦП с чипом ADS1115 4-х канальные и стоят с доставкой в Россию в районе 1,5 USD. Примерно столько же стоит 12-ти разрядный ADS1015. Datasheet здесь.

Чтобы в ESP8266 получить такое-же количество каналов АЦП, как у ESP32 потребуется 4 шт. внешних АЦП и цена только этих модулей получится в районе 6 USD. Сам чип ESP32 распаянный на плате можно приобрести примерно за 7 USD с доставкой в Россию. Схема подключения здесь.

Если есть сомнения по поводу входного напряжения, то целесообразно использовать внешний АЦП, поскольку выход из строя платы на 4 канала обойдется несколько дешевле, чем потеря микроконтроллера.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno Либо подстраховываться установкой стабилитрона.

Помимо АЦП в ESP32 есть два 8-ми битных ЦАП (DAC).

Мультиплексор/демультиплексор аналоговых входов

Помимо увеличения аналоговых входов с помощью АЦП есть вариант расширения мультиплексором. Хорошая статья на эту тему в которой подробно рассмотрен аналоговый мультиплексор/демультиплексор CD4051/74HC4051. Много вариантов от других производителей.

CD4051 — это 8 канальный аналоговый CMOS мультиплексор/демультиплексор. ДЛя увеличения количества аналоговых входов на 7 потребуется 1 аналоговый и 3 цифровых входа.

Функциональная схема работы мультиплексора/демультиплексора CD4051

Мультиплексор передает сигнал с одного из нескольких входов на единственный выход. Демультиплексор, напротив, передает сигнал с единственного входа на один из информационных выходов.

Если приобретать модуль на Aliexpress, то цена будет в районе 0,8 USD за 8 каналов, 16-ти разрядное АЦП ADS1115 — 1,5 USD за 4 канала.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno Если же приобретать только микросхему CD4051, то цена будет гораздо ниже микросхемы АЦП.

Увеличение количества цифровых GPIO входов/выходов

Плата увеличения количества GPIO портов.

Для увеличения количества цифровых входов можно воспользоваться добротной платой расширителя GPIO на 8 Входов/Выходов. Она хорошо документирована, исполнена на высоком техническом уровне. Хотя, ценник не Aliexpress-а. 🙂 При изготовлении нескольких сотен устройств, себестоимость конечного устройства существенно вырастет.

Посмотрим, что есть на сей счет есть у китайских собратьев. А у них конечно-же что-то есть и недорого. 🙂

8-канальный расширитель GPIO на чипе PCF8574 с DIP переключателями для назначения I2C адреса

8-канальный расширитель GPIO на чипе PCF8574 с джамперами для назначения I2C адреса. Эту плату можно каскадировать.

Сразу отмечу качественное исполнение модулей по цене в районе 1 USD. Чип от TI PCF8574 обеспечивает 8 каналов ввода-вывода (GPIO) управляемых по шине I2C.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno Есть выход INT соединяемый с входом микроконтроллера поддерживающим обработку прерываний. При возникновении прерывания на одном из входов платы расширения, прерывание транслируется микроконтроллеру для дальнейшей приоритетной обработки поступившего сигнала.

Конструктивно синие модули удобно каскадировать, втыкая один в другой. Адрес устройств удобно задается либо DIP переключателями, либо джамперами. Возможно подключение внутренних pullup резисторов на +5V.

16-ти канальный расширитель GPIO на чипе PCF8575

Старший брат TI PCF8575 позволяет получить 16 GPIO портов за цену в два раза выше. Но реализация платы попроще. никаких DIP переключателей для выбора адреса I2C. Зато 16 каналов в компактном исполнении.

Аналогичный чип от компании Microchip на 16 входов для расширения количества GPIO портов, MCP23017. Есть вариант для шины I2C и более шустрый для SPI (MCP23S17). Китайские продавцы нередко указывают в описании товара чип MCP23S17, однако по фото платы видно, что чип MCP23017.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno Обращайте на это внимание! Аналогичный чип на 8 портов — MCP23008.

MCP23017 плата увеличения GPIO для микроконтроллеров

Цена этого варианта модуля в районе 1,5 USD. Исполнение платы попроще обойдется почти в два раза дешевле. Чип позволяет обеспечить увеличение GPIO на 8+8=16. Как и чип от Texas Instruments помимо входов для подключения устройств есть два выхода прерываний на каждый блок из 8 устройств. Этот чип позволяет работать на частоте до 1,7 МГц и 10 MHz для версии под шину SPI, в отличие от чипа PCF8574 для которого верхний предел 400 кГц. Также возможно подключение внутренних pullup резисторов на +5V. Схема подключения платы к ESP8266 разобрано здесь.

SX1509 модуль для увеличения количества GPIO.

Ещё один 8+8=16-ти канальный расширитель количества GPIO с Aliexpress на чипе SX1509. Библиотека и описание от Sparkfun. Чип дороже, чем ранее представленные. По ТТХ чип очень похож на ранее рассмотренные варианты. Работает на частоте 400 кГц. Есть встроенная поддержка ШИМ (PWM) на выходах.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno

Чип «заточен» для работы с LED и клавиатурой. В части LED из-за наличия ШИМ позволяет управлять яркостью светодидов, выполнять затухание, моргание и пр. Есть в наличии выход INT для трансляции прерываний микроконтроллеру. Поддерживаются встроенные pull-up, pull-down резисторы на входах.

GPIO expander от Fairchild (ON Semiconductor) FXL6408UMX. Аналогично 8 портов управляемых по шине I2C. Datasheet.

Выходы управления реле

Для управления силовой частью, например, реле, хорошо бы иметь сборку транзисторов Дарлингтона, вроде недорогого ULN2003, но управляюмую по цифровым шинам.

MAX4820/4821 — транзисторые сборки управляемые по SPI/параллельному интерфейсу 8 выходов. Коммутируют максимум 5 V нагрузку.

TPIC2603 — управляемая по последовательному интерфейсу SDI сборка на 6 каналов.

TPIC2802 — управление по последовательному интерфейсу 8 каналами с током по 1А на канал.

MC33996 — управляемый по шине SPI коммутатор 16 выходов.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno

RTC

Подключение внешнего кварцевого резонатора к ESP32

По одним статьям RTC в ESP32 — это не Real Time Clock, а ядро низкого энергопотребления. Однако, по другим все-же Real Time Clock, но плохого качества (+-5%), который не стоит использовать в бизнес-приложениях.

Возможно, проблема неточности встроенного RTC может быть решена добавлением внешнего кварцевого резонатора. Я нашел упоминание о схеме подключения карцевого резонатора к контактам RTC_GPIO8/RTC_GPIO9. Но непонятно как запитывать встроенный RTC от батарейки. Отдельного входа RTC VBAT нет.

В общем, не факт, что удастся сэкономить на входе. 🙁 Особенно, если нужен data logger, а не только RTC. В data logger RTC уже встроен и SPI выводы на чтение/запись придется отдать :-(. Хотя в data logger RTC нередко подключается на шину I2C.

Подключение датчиков 4..20 мА

рассмотрено в статье.

Подключение I2C датчиков

В теории к одной шине I2C можно подключить до 127 устройств.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno У каждого из устройств должен быть свой уникальный адрес. Нередко адрес устройства один и жестко «прошит», поэтому нельзя подключить на одну шину несколько таких модулей. Входов I2C в ESP всего 1 (2 у ESP32) шт.

Для подключения I2C устройств с совпадающими адресами используются I2C мультиплексоры. На Aliexpress из недорогих доступен I2C extender на чипе TCA9548A. Цена в районе 1 USD с доставкой в Россию.

8-канальный I2C мультиплексор на чипе TCA9548A

Мультиплексор работает просто. По умолчанию ему присвоен некоторый адрес. Микроконтроллер соединяется с ним по шине I2C и затем отправляет команду выбора одного из 8-ми выходов, с которым будет происходить общение. Далее можно взаимодействовать с I2C устройством как будто с ним установлено прямое соединение. Если нужно периодически опрашивать все датчики подключенные к 8 входам, то такой опрос происходит в цикле.

Фактически, мультиплексор обеспечивает временную прямую коммутацию GPIO микроконтроллера с выбранным устройством по его номеру.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno Это некоторый недорогой workaround для решения проблем с конфликтом адресов I2C.

Интерфейс RS485

Модуль интерфейса RS485 для Arduino/ESP8266/ESP32

Подробный обзор досупных модулей реализующих RS485 интерфейс сделал в статье.

Подключение K-Type термопар

Модуль MAX6675 для подключения термопары K-Type к
микроконтроллеру по шине SPI

Подключение термопар к ESP32/ESP8266/Arduino с помощью модулей MAX6675 и MAX31855.

Увеличение количества UART (RX/TX) портов

Для некоторых задач есть необходимость увеличения количества последовательных портов. Для старших моделей Arduino, например, Mega, острой необходимости в увеличении последовательных портов нет, там их достаточно. Однако для ESP8266 задача вполне актуальна, учитывая что там только один hardware serial port, да и тот нередко занят под распаянный на плате USB ковертер. Можно эмулировать работу последовательного порта на GPIO с помощью SoftSerial, но не для всех задач это приемлемо.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno

Расширение одного последовательного порта UART (RX/TX) на
8-мь дополнительных последовательных портов

Решение от компании AtlasScientific — 8:1 Serial Port Expander самое дорогое. Цена в районе 15$ без доставки довольно высока, хотя если сравнивать с одно и двух портовыми модулями, то цена за порт меньше 2 $, что выгоднее чем у 1-2-х портовых собратьев.

SC16IS760 модуль для конвертации I2C / SPI на один UART порт

Есть конвертеры I2C в один порт UART и 8 GPIO портов на чипе SC16IS750. Стоят порядка 4 $ с оставкой в Россию. SPI вариант на чипе
SC16IS760. Учитывая, что на одну шину можно вешать несколько модулей — можно набрать нужное количество. SPI порт достаточно шустрый, чтобы обеспечить подключение достаточно большого количества таких модулей.

SC16IS762 модуль для конвертации I2C / SPI на два UART порта

Есть старший собрат ковертера I2C в два порта UART и 8 GPIO портов на чипе SC16IS752. Стоят порядка 5 $. SPI вариант на чипе SC16IS762.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno

Плат на чипах MAX14830, MAX3107, MAX3108, MAX3109 я на Aliexpress не нашел.

Схемное решение для получения 4-х портов UART.

Заключение

На этом краткий обзор по вариантам расширения входов микроконтроллеров завершаю. В дальнейшем рассмотрю работу с указанными модулями подробнее.

Документация по NodeMCU

Документация по NodeMCU

  • Обзор

  • Основы

    • Начиная

    • Сборка прошивки

    • Прошивка прошивки

    • Код загрузки

    • Компиляция кода

    • Служба поддержки

  • Справка

    • Справочное руководство по языку NodeMCU

    • Программирование в NodeMCU

  • FAQs

    • Часто задаваемые вопросы разработчика Lua

    • Часто задаваемые вопросы для разработчиков расширений

    • Часто задаваемые вопросы по оборудованию

  • Белые бумаги

    • Lua 5.Nodemcu i2c: I2C подключение NodeMCU V3 ESP8266 к Arduino Uno 3 Поддержка

    • Lua Flash Store (LFS)

    • Компактная отладка Lua (ЖК-дисплей)

    • Файловая система на SD-карте

    • Внутренняя файловая система

  • Модули Lua

    • Каталог модулей Lua

    • bh2750

    • bme280

    • помощник

    • ds18b20

    • ds3231

    • фифо

    • Fifosock

    • ftpserver

    • сплетни

    • HDC1000

    • httpserver

    • imap

    • жидкокристаллический

    • lm92

    • mcp23008

    • mcp23017

    • Redis

    • телнет

    • yeelink

  • Модули C

    • adc

    • реклама1115

    • adxl345

    • am2320

    • apa102

    • немного

    • цвести

    • bme280

    • bme280_math

    • bme680

    • bmp085

    • cjson

    • копейка

    • цветные утилиты

    • cron

    • крипто

    • DCC

    • dht

    • кодировщик

    • настройка конечного пользователя / адаптивный портал / менеджер Wi-Fi

    • файл

    • gdbstub

    • gpio

    • HDC1080

    • hmc5883l

    • http

    • hx711

    • i2c

    • l3g4200d

    • mcp4725

    • mdns

    • mqtt

    • сеть

    • узел

    • ow (1-Wire)

    • pcm

    • перфоманс

    • трубка

    • шим

    • pwm2

    • rfswitch

    • вращающийся

    • rtcfifo

    • rtcmem

    • rtctime

    • si7021

    • сигма-дельта

    • sjson

    • СНТП

    • Softuart

    • Somfy

    • spi

    • структура

    • switec

    • tcs34725

    • TLS

    • tm1829

    • tmr

    • tsl2561

    • u8g2

    • уарт

    • ucg

    • веб-сокет

    • Виганд

    • вай-фай

    • вай-фай.монитор

    • wps

    • ws2801

    • ws2812

    • ws2812-эффекты

    • xpt2046

Документация по NodeMCU

  • Документы »

Страница не найдена


Создан с помощью MkDocs с использованием темы, предоставленной Read the Docs.GitHub

Документация по NodeMCU

Документация по NodeMCU

  • Обзор

  • Основы

    • Начиная

    • Сборка прошивки

    • Прошивка прошивки

    • Код загрузки

    • Компиляция кода

    • Служба поддержки

  • Справка

    • Справочное руководство по языку NodeMCU

    • Программирование в NodeMCU

  • FAQs

    • Часто задаваемые вопросы разработчика Lua

    • Часто задаваемые вопросы для разработчиков расширений

    • Часто задаваемые вопросы по оборудованию

  • Белые бумаги

    • Lua 5.3 Поддержка

    • Lua Flash Store (LFS)

    • Компактная отладка Lua (ЖК-дисплей)

    • Файловая система на SD-карте

    • Внутренняя файловая система

  • Модули Lua

    • Каталог модулей Lua

    • bh2750

    • bme280

    • помощник

    • ds18b20

    • ds3231

    • фифо

    • Fifosock

    • ftpserver

    • сплетни

    • HDC1000

    • httpserver

    • imap

    • жидкокристаллический

    • lm92

    • mcp23008

    • mcp23017

    • Redis

    • телнет

    • yeelink

  • Модули C

    • adc

    • реклама1115

    • adxl345

    • am2320

    • apa102

    • немного

    • цвести

    • bme280

    • bme280_math

    • bme680

    • bmp085

    • cjson

    • копейка

    • цветные утилиты

    • cron

    • крипто

    • DCC

    • dht

    • кодировщик

    • настройка конечного пользователя / адаптивный портал / менеджер Wi-Fi

    • файл

    • gdbstub

    • gpio

    • HDC1080

    • hmc5883l

    • http

    • hx711

    • i2c

    • l3g4200d

    • mcp4725

    • mdns

    • mqtt

    • сеть

    • узел

    • ow (1-Wire)

    • pcm

    • перфоманс

    • трубка

    • шим

    • pwm2

    • rfswitch

    • вращающийся

    • rtcfifo

    • rtcmem

    • rtctime

    • si7021

    • сигма-дельта

    • sjson

    • СНТП

    • Softuart

    • Somfy

    • spi

    • структура

    • switec

    • tcs34725

    • TLS

    • tm1829

    • tmr

    • tsl2561

    • u8g2

    • уарт

    • ucg

    • веб-сокет

    • Виганд

    • вай-фай

    • вай-фай.монитор

    • wps

    • ws2801

    • ws2812

    • ws2812-эффекты

    • xpt2046

Документация по NodeMCU

  • Документы »

Страница не найдена


Создан с помощью MkDocs с использованием темы, предоставленной Read the Docs.GitHub

Документация по NodeMCU

Документация по NodeMCU

  • Обзор

  • Основы

    • Начиная

    • Сборка прошивки

    • Прошивка прошивки

    • Код загрузки

    • Компиляция кода

    • Служба поддержки

  • Справка

    • Справочное руководство по языку NodeMCU

    • Программирование в NodeMCU

  • FAQs

    • Часто задаваемые вопросы разработчика Lua

    • Часто задаваемые вопросы для разработчиков расширений

    • Часто задаваемые вопросы по оборудованию

  • Белые бумаги

    • Lua 5.3 Поддержка

    • Lua Flash Store (LFS)

    • Компактная отладка Lua (ЖК-дисплей)

    • Файловая система на SD-карте

    • Внутренняя файловая система

  • Модули Lua

    • Каталог модулей Lua

    • bh2750

    • bme280

    • помощник

    • ds18b20

    • ds3231

    • фифо

    • Fifosock

    • ftpserver

    • сплетни

    • HDC1000

    • httpserver

    • imap

    • жидкокристаллический

    • lm92

    • mcp23008

    • mcp23017

    • Redis

    • телнет

    • yeelink

  • Модули C

    • adc

    • реклама1115

    • adxl345

    • am2320

    • apa102

    • немного

    • цвести

    • bme280

    • bme280_math

    • bme680

    • bmp085

    • cjson

    • копейка

    • цветные утилиты

    • cron

    • крипто

    • DCC

    • dht

    • кодировщик

    • настройка конечного пользователя / адаптивный портал / менеджер Wi-Fi

    • файл

    • gdbstub

    • gpio

    • HDC1080

    • hmc5883l

    • http

    • hx711

    • i2c

    • l3g4200d

    • mcp4725

    • mdns

    • mqtt

    • сеть

    • узел

    • ow (1-Wire)

    • pcm

    • перфоманс

    • трубка

    • шим

    • pwm2

    • rfswitch

    • вращающийся

    • rtcfifo

    • rtcmem

    • rtctime

    • si7021

    • сигма-дельта

    • sjson

    • СНТП

    • Softuart

    • Somfy

    • spi

    • структура

    • switec

    • tcs34725

    • TLS

    • tm1829

    • tmr

    • tsl2561

    • u8g2

    • уарт

    • ucg

    • веб-сокет

    • Виганд

    • вай-фай

    • вай-фай.монитор

    • wps

    • ws2801

    • ws2812

    • ws2812-эффекты

    • xpt2046

Документация по NodeMCU

  • Документы »

Страница не найдена


Создан с помощью MkDocs с использованием темы, предоставленной Read the Docs.GitHub

Сканер

NodeMCU i2c в среде Arduino IDE — Robo India || Учебники || Изучите Arduino |

В этом руководстве Robo India объясняется, как получить адрес устройства i2c, подключенного к NodeMCU, с помощью Arduino IDE.

Подробное руководство
1. Введение:

Шина

2C — это средство подключения нескольких периферийных устройств ввода и вывода, поддерживающих I2C, по двум проводам. Один из этих проводов — это линия DATA, называемая SDA, а другой — это линия CLOCK, называемая SCL.Информация отправляется по этим двум линиям с использованием так называемого протокола связи I2C.

В этом руководстве объясняется, как найти подключенные устройства i2c с помощью NodeMCU. Он также сканирует адрес каждого устройства i2c, подключенного к NodeMCU.

Здесь, в примере, рюкзак i2c с ЖК-дисплеем используется для выполнения этого руководства, хотя это руководство является общим для получения адреса любого устройства i2c, подключенного к NodeMCU.

1.3 Требуемое оборудование

907 907 9082 902 902 902 Перемычка между штекером и гнездом

С.№ Изделие Кол-во
1 NodeMCU 1
2 Макетная плата 1
3 4
2. Схема здания
3. Программирование:

После того, как часть схемы готова, нужно запрограммировать NodeMCU.Вот код для запуска этой схемы на NodeMCU.

Вы можете скачать этот код (Arduino Sketch) отсюда.

 // Учебное пособие по Robo India
// Цифровой вход и выход на светодиодах
// Оборудование: NodeMCU

// Ссылка - Ник Гаммон  http://www.gammon.com.au/forum/?id=10896 
// Сканер I2C

#include 

void setup () {
  Серийный . Начало (9600);
 while (!  Serial ) // Ожидание последовательного подключения
 {
 }

  Серийный номер  .println ();
  Серийный .println ("Сканер I2C. Сканирование ...");
 количество байтов = 0;
 
 Wire.begin ();
 для (байт i = 8; i <120; i ++)
 {
 Wire.beginTransmission (i);
 если (Wire.endTransmission () == 0)
 {
  Serial  .print («Найден адрес:»);
  Серийный номер  .print (i, DEC);
  Серийный номер  .print ("(0x");
  Серийный номер  .print (i, HEX);
  Серийный номер  .println (")");
 count ++;
 задержка (1); // может быть ненужным?
 } // конец хорошего ответа
 } // конец цикла for
  Серийный .println ("Готово.");
  Серийный номер  .print («Найдено»);
  Serial  .print (count, DEC);
  Серийный номер  .println («устройство (а).»);
} // конец настройки

void loop () {}

 
4. Выход

Откройте монитор последовательного порта после загрузки кода. Результат этого скетча будет таким, как показано ниже. Адрес I2C выделен. Адрес I2C нашего подключенного устройства — 0x3F.

Если у вас есть какие-либо вопросы, напишите нам по адресу [email protected]

С уважением и уважением
Команда разработки контента
Робо Индия
https: // roboindia.com

Как подключить ЖК-дисплей PCF8574 I2C к ESP8266 NodeMCU?

В этом руководстве мы узнаем, как связать ЖК-дисплей I2C с платой разработки ESP8266 NodeMCU. ЖК-дисплей PCF8574 I2C — это специальный модуль для ЖК-дисплеев с разрешением 16 × 2 и 20 × 4 символов. Мы узнаем, как работает ЖК-интерфейс ESP8266 NodeMCU I2C, как настроить I 2 C в ESP8266 NodeMCU и отобразить некоторые данные на ЖК-дисплее 16 × 2.

Потребность в ЖК-дисплее I2C

ESP8266 NodeMCU — отличная плата разработки для приложений, связанных с Wi-Fi.Еще одно преимущество этой платы — контакты GPIO. После извлечения всех выделенных контактов GPIO (для SPI Flash IC и UART) мы получаем около 9 контактов GPIO, которые можно использовать бесплатно.

Но что, если вы хотите связать ЖК-дисплей 16 × 2 символов с ESP8266 NodeMCU? Даже в 4-битном параллельном режиме связи ЖК-дисплей 16 × 2 займет 6 контактов GPIO микроконтроллера (четыре для данных, один для RS и один для E).

Использование такого количества контактов GPIO для символьного ЖК-дисплея невозможно, если вы планируете сопрягать другие важные датчики и устройства.

Здесь пригодится ЖК-модуль I2C. Он разработан специально для ЖК-дисплеев с символами 16 × 2 и 20 × 4 и взаимодействует через интерфейс I 2 C. Таким образом, от 6 контактов GPIO мы дошли до двух контактов GPIO (SDA и SCL I 2 C).

Краткий обзор ЖК-модуля PCF8574 I2C

Как следует из названия, ЖК-модуль PCF8574 I2C основан на ИС расширителя GPIO PCF8574. Первоначально он использовался в модулях для расширения контактов GPIO микроконтроллера и взаимодействовал с микроконтроллером через интерфейс I 2 C.

Вместо расширения GPIO, ЖК-модуль I2C предназначен для управления символьным ЖК-дисплеем. Итак, его распиновка совпадает с типичным ЖК-дисплеем 16 × 2, он содержит потенциометр для регулировки контрастности, а также перемычку для включения или выключения подсветки.

ESP8266 NodeMCU I2C LCD

Давайте теперь разберемся, как работает интерфейс ESP8266 NodeMCU I2C LCD. Если вы помните распиновку ESP8266 NodeMCU, D1 и D2, то есть GPIO 5 и GPIO 4 часто используются для связи I 2 C.

D1 (GPIO 5) — это вывод SCL, а D2 (GPIO 4) — это вывод SDA. Мы должны использовать эти два контакта для подключения к ЖК-модулю PCF8574 I2C.

Других соединений между ЖК-модулем I2C и самим ЖК-дисплеем нет, поскольку модуль просто вставляется в контакты ЖК-дисплея. Вам нужно только предоставить источник питания и соединения I 2 C.

В следующей таблице показаны соединения между ЖК-модулем I2C и ESP8266 NodeMCU.

VCC

I2C ЖК-модуль

ESP8266 NodeMCU

GND

GND
VCC 9025 902 907 907 907 SDI07 902 9025 907 907 902 9025 902
SCL

D1 — GPIO 5

ПРИМЕЧАНИЕ: ЖК-дисплей работает при напряжении питания в диапазоне 4.7 В и 5,3 В. Итак, хотя микросхема PCF8574 работает при питании от 2,5 В до 6 В, вместо 3,3 В от NodeMCU мы даем 5 В.

Необходимые компоненты

  • ESP8266 NodeMCU
  • PCF8574 ЖК-модуль I2C
  • 16 × 2-символьный ЖК-дисплей
  • Макетная плата
  • Соединительные провода

Принципиальная схема

Схема интерфейса ISP на следующем изображении .

Подготовка Arduino IDE

Если вы раньше не работали с ЖК-модулем I2C, вам необходимо загрузить специальную библиотеку.Откройте Arduino IDE и перейдите в Инструменты -> Управление библиотеками. . .

Найдите «liquidcrystal i2c» и загрузите библиотеку «LiquidCrystal I2C» Франка де Брабандера.

Я использовал эту библиотеку в нескольких предыдущих проектах. Итак, вы видите, что он у меня уже установлен.

Теперь выполните все необходимые подключения, как упоминалось ранее, и подключите ESP8266 NodeMCU к компьютеру. Убедитесь, что на платах выбран NodeMCU, а также установите правильный COM-порт.

Получение подчиненного адреса ЖК-модуля I2C

Перед написанием фактического кода для отображения информации на ЖК-дисплее мы должны сначала определить подчиненный адрес ЖК-модуля PCF8574 I2C. Если вы помните основы I 2 C Связь, ведущее устройство может общаться с ведомым, только если ему известен адрес ведомого.

Здесь ESP8266 NodeMCU является ведущим устройством шины I 2 C, а ЖК-модуль PCF8574 I2C является ведомым.

Итак, давайте воспользуемся следующим кодом, чтобы получить адрес подчиненного устройства ЖК-модуля I2C.После выполнения всех подключений загрузите код в ESP8266 NodeMCU и откройте монитор последовательного порта.

Код

ESP8266 будет искать любые подчиненные устройства, и если подчиненное устройство подтверждает, он получает свой адрес подчиненного устройства и печатает его на последовательном мониторе. В моем случае адрес подчиненного устройства равен 0x3F. мы должны использовать этот адрес подчиненного устройства в основном коде.

Отображение простого текста

Теперь давайте посмотрим, как отобразить простой текст на ЖК-дисплее 16 × 2 с помощью ЖК-модуля ESP8266 и I2C.Никаких дополнительных подключений нет, поскольку все, что нам нужно, — это ранее сделанные подключения.

Код

Значение АЦП на ЖК-дисплее

В качестве бонуса я сделал небольшую схему, в которой потенциометр 10 кОм подключен к контактам АЦП узла NodeMCU (обозначен A0) и отображает результат АЦП на ЖК-дисплее с помощью ЖК-модуль I2C.

Если вы помните спецификации ESP8266, его внутренний АЦП имеет разрешение 10 бит. Таким образом, на выходе АЦП будет число от 0 до 1023.

Также обратите внимание, что ESP8266 имеет только один канал АЦП. На плате NodeMCU вывод ADC помечен как A0. Контакт стеклоочистителя потенциометра 10 кОм подключен к A0 NodeMCU. Два других контакта потенциометра подключены к 3,3 В и GND соответственно.

ВНИМАНИЕ: Подключайте POT только к 3,3 В. Не подключайте POT к 5 В, поскольку АЦП ESP8266 не может выдерживать напряжение более 3,3 В.

Принципиальная схема

На следующем изображении показана принципиальная схема для подключения потенциометра 10 кОм к ESP8266 NodeMCU и отображения результата АЦП на ЖК-дисплее I2C.

Код

Заключение

Простое руководство по взаимодействию ЖК-модуля PCF8574 I2C с платой разработки ESP8266 NodeMCU. Вы узнали о важности ЖК-модуля I2C, о том, как работает ЖК-интерфейс ESP8266 NodeMCU I2C, о том, как отображать текст на ЖК-дисплее.

Вы даже можете отобразить некоторые специальные символы или сделать прокручиваемый текст.

raspberry pi — высокоскоростной модуль NodeMCU ESP8266 I2C

Я делаю беспроводное устройство для измерения магнитного поля на основе магниторезистивного датчика HMC5983 и ESP8266 (модуль NodeMCU ESP-12e).

Датчик подключен к ESP8266 по интерфейсу I2C. В
ESP8266 опрашивает датчик и отправляет его сборщику данных (Raspberry Pi).

Для меня чрезвычайно важно добиться максимально возможного количества вычислений в секунду, так как от этого зависит качество получаемых данных для последующей обработки.

HMC5983 поддерживает интерфейс I2C в стандартном, быстром и высокоскоростном режимах. Но модуль NodeMCU I2C поддерживает только скорость i2c.SLOW.

Стандартные скорости шины I²C

: стандартный режим 100 кбит / с и 10
кбит / с в низкоскоростном режиме https: // en.wikipedia.org/wiki/I%C2%B2C

Затем я подключил HMC5983 напрямую к Raspberry Pi через I2C. Я смог достичь около 500 измерений в секунду (отслеживая вывод прерывания DRDY) в режиме одиночного измерения и 200 измерений в секунду в режиме непрерывного измерения (при скорости вывода данных 220 Гц — все в порядке).
Программа написана на Python, вот код:

  #! / Usr / bin / python
import smbus # для использования i2c
время импорта
импорт ОС

bus = smbus.SMBus (1) # использовать порт 1 i2c на Rasspberry Pi
адрес = 0x1e # адрес HMC5983 0x1E

автобус.write_byte_data (addr, 0x00,0b00011100) # Записать в CRA Speed ​​220Hz
bus.write_byte_data (addr, 0x01,0b00100000) # Запись в CRB Gain 660 + -2.5Ga 1.52mG / Lsb

print "Начать измерение .....
while True: # если нам нужен бесконечный цикл
    bus.write_byte_data (addr, 0x02,0b00000001) # Запись в режим однократного измерения
    while bus.read_byte_data (addr, 0x09) == 0b11: #Wait RDY в регистре состояния
       ()
    # ДАННЫЕ ГОТОВЫ
    data = bus.read_i2c_block_data (addr, 0x03,6) # Взять данные из регистров данных
    # преобразовать три 16-битных шестнадцатеричных значения дополнения 2 в десятичные значения и присвоить x, y, z
    x = данные [0] * 256 + данные [1]
    если x> 32767:
        х - = 65536
    y = данные [2] * 256 + данные [3]
    если y> 32767:
        у - = 65536
    z = данные [4] * 256 + данные [5]
    если z> 32767:
        г - = 65536
    напечатать «X =», x, «\ tY =», y, «\ tZ =», z
  

Когда я подключил HMC5983 к ESP8266, я смог выполнить только около 140 вычислений в секунду в режиме одиночных вычислений.

  ---------- ЭТО ДЛЯ РЕЖИМА ОДНОГО ИЗМЕРЕНИЯ -------------
--init i2c
функция H_init (sda, scl)
    i2c.setup (идентификатор, sda, scl, i2c.SLOW)
    print ("I2C запущен ...")
конец
- читает с сенсора 6 байт
функция read_axis ()
    i2c.start (идентификатор)
    i2c.address (id, dev_addr, i2c.RECEIVER)
    data = i2c.read (идентификатор, 6)
    i2c.stop (идентификатор)
    вернуть данные
конец
- установить регистр
функция set_reg (reg_addr, val)
    i2c.start (идентификатор)
    i2c.address (id, dev_addr, i2c.TRANSMITTER)
    i2c.write (идентификатор, reg_addr)
    i2c.написать (id, val)
    i2c.stop (идентификатор)
конец
-------- ИНИЦИЛИЗАЦИЯ GPIO -------
drdyn_pin = 3
gpio.mode (drdyn_pin, gpio.INPUT)
------- ИНИЦИЛИЗАЦИЯ I2C -------
id = 0
i2c = i2c
местный я = 0
dev_addr = 0x1e
H_init (1,2)
set_reg (0x00,0x1c) - установить скорость 220 Гц
set_reg (0x01,0x20) - установить усиление
print ("Начать измерение ...")
в то время как правда
    set_reg (0x02,0x01) - режим одиночных измерений
    в то время как (gpio.read (drdyn_pin) == 1) делать
    конец
    data = read_axis ()
    tmr.wdclr ()
конец
  

После этого я настроил датчик на режим непрерывных измерений и получил те же 200 измерений в секунду.

Возможна ли работа интерфейса I2C в NodeMCU на высоких скоростях? Может кто подскажет, как попробовать ускорить опрос сенсоров?

Взаимодействие BMP280 с ESP8266 на I2C с ошибками и решениями — Circuit Schools

В этом кратком руководстве мы узнаем, как связать BMP 280 с ESP8266 [NodeMCU], а также научимся устранять такие ошибки, как «Не удалось найти действующий датчик BMP 280, проверьте проводку». или получил какие-то мусорные значения вместо значений датчиков при их сопряжении.

Необходимые компоненты:

  • 1X ESP 8266 NodeMCU WiFi плата разработки
  • 1X BMP280 Датчик температуры, атмосферного давления и приблизительной высоты
  • Несколько соединительных проводов
  • Кабель Micro USB

BMP 280 Датчик температуры и давления Обзор:

Датчик BMP280 объединяет датчики атмосферного давления, температуры и относительной влажности в одном устройстве с высокой точностью, низким энергопотреблением и сверхкомпактным форматом.Основан на пьезорезистивной технологии BOSCH с высокой устойчивостью к электромагнитным помехам, высокой точностью и линейностью, а также долговременной стабильностью. Он подключается напрямую к микроконтроллеру через I2C или SPI.

Ступень измерения давления аналогична датчику BMP280 и, следовательно, превосходит BMP180. Что касается датчика относительной влажности, он демонстрирует выдающиеся характеристики по сравнению с датчиками DHT22 или DHT21.

Этот тип датчика может использоваться для расчета высоты с большой точностью (барометр), что делает его широко используемым датчиком в системах автопилота для дронов (БПЛА), обеспечивая измерения высоты с точностью до 1 м.К другим приложениям относятся: мониторинг климата, монитор здоровья / фитнеса, домашняя автоматизация или домашняя электроника и кондиционирование воздуха.

Лист данных: ссылка

Технические характеристики:

  • Интерфейс связи: I2C или SPI (3,3 В)
  • Рабочее напряжение: 1,8 — 3,3 В постоянного тока
  • Абсолютная точность: 1 гПа
  • Диапазон температур: от -40 ° C до 85 ° C
  • Точность температуры: 1 ° C
  • Температурное разрешение: 0,01 ° C
  • Точность относительной влажности: + -3%
  • Диапазон относительной влажности: 0-100% относительной влажности
  • Сверхнизкое энергопотребление

Принципиальная схема взаимодействия BMP280 и ESP8266 по протоколу I2C

Здесь мы соединяем обе платы, используя всего 4 соединительных провода, используя соединение I2C.Подробные сведения о подключении см. На схеме ниже.

На изображении выше BMP 280 имеет 6 контактов, 2 контакта для входа 3,3 В и заземления соответственно. и еще 2 контакта для SCL и SDA. Поскольку мы подключаем их через интерфейс i2c, оставьте два других контакта CSB и SDO нетронутыми.

На микроконтроллере узла ESP8266 мы подключаем вывод VCC BMP280 к 3,3 В, а вывод GND к выводу GND ESP8266. Затем нам нужно подключить выводы SDA и SCL BMP 280 к ESP8266.но на ESP8266 эти значения контактов не печатаются. Итак, давайте посмотрим на распиновку ESP8266, где SCL находится на контакте D1, а SDA — на контакте D2.

Теперь давайте подключим эти контакты к D1 и D2. Это для связи. теперь, чтобы загрузить образец кода для отображения температуры и барометрического давления. Нам нужно подключить ESP8266 NodeMCU с помощью кабеля Micro USB к вашему ПК, на котором установлена ​​Arduino IDE.

Теперь давайте взглянем на ПК, на котором мы компилируем и выполняем код.Сначала откройте Arduino IDE, щелкните файл-> Примеры -> Библиотека BMP 280 и щелкните Тест Bmp 280, чтобы загрузить образец кода.

Если вы не нашли ее, вам необходимо загрузить и установить библиотеку Adafruit Bmp 280, ссылка здесь.

Итак, ниже приведен код, в котором упоминается соединение i2c, инициализация bmp280 и печать значений на последовательном мониторе.

Перед загрузкой выберите плату как ESP8266 NodeMCU 1.0. и выберите COM-порт устройства.вы можете получить это через порты диспетчера устройств. теперь нажмите кнопку загрузки.

После компиляции и загрузки. Откройте последовательный монитор, чтобы проверить вывод. Выберите правильную скорость передачи последовательного монитора, упомянутую в коде.

Но иногда мы можем получить сообщение об ошибке: «Не удалось найти действующий датчик BMP 280, проверьте проводку».

Чтобы решить эту проблему, сначала нам нужно найти адрес i2c датчика BMP с помощью сканера i2c, как и в наших предыдущих руководствах, ссылка на код здесь.