IoT: ESP8266 и датчик температуры DS18B20

На базе бюджетного WI-FI модуля ESP8266 можно легко и быстро разрабатывать устройства IoT. Примерами таких устройств могут быть беспроводные датчики температуры, влажности, давления, освещенности. Для этого достаточно обновить прошивку модуля и подключить соответствующие датчики. Дополнительные микроконтроллеры не нужны.
В данный момент прошивка поддерживает считывание датчиков DHT11/22 BMP085/180, BH1750, DS18B20, AM2321 и другие. Существует функция передачи показаний на сайт народного мониторинга, на сервис учета метрик ThingSpeak.com, MQTT сервер, в систему умного дома MajorDoMo, в систему компьютерного контроля Бенукс. Есть возможность управлять состоянием свободных GPIO для управления нагрузками (реле), читать состояние входов GPIO, выводить данные на LCD или OLED экран и многие другие функции.
Пример схемы подключения датчиков для оценки простоты сборки устройства приведены на рисунке 1.

esp8266_ds18b20_dht11_bmp180
Рисунок 1 – Пример подключения датчиков к ESP8266

Реальная и правильная схема подключения может отличаться (например питания для датчика DHT22 желательно давать 5В). Также не рекомендуется использовать ESP-01. Рекомендуемые модули ESP-07 и ESP-12 и другие, с максимально выведенными GPIO. Для более полноценного использования прошивки рекомендуются модули с flash памятью 1 мегабайт и более, возможна перепайка чипа памяти.
Рассмотрим подробнее пример подключения датчика температуры компании DALLAS DS18B20 (рис.2) к ESP8266 для создания IoT устройства Wi-Fi термометра.

ds18b20
Рисунок 2 – Внешний вид датчика DS18B20

Подключаем питание на ESP8266. На контакт CH_PD так же подаем плюс. Внимание! Если используется не ESP-01, необходимо подать GPIO15 – GND; GPIO2 -3.3V. В ESP-01 это уже сделано. RX и TX подключаем к USB-TTL преобразователю для прошивки и отладки кода (рис.3).

usb_uart_esp8266
Рисунок 3 – Прошивка ESP8266 с помощью конвертера

Подключаем DS18B20 к ESP8266. Если смотреть на маркировку: левая – земля, средняя – сигнал (GPIO12 на ESP-03), если у вас ESP-01, подключайте к GPIO0, правая – питание (3.3V). Между питанием и сигнальной линией желательно подключить резистор 4.7 кОм (рис.4).

esp8266_ds18b20
Рисунок 4 – Подключение DS18B20 к ESP8266

thingspeak.com
Регистрируемся на https://thingspeak.com/, создаем канал, копируем оттуда 16-символьный ключ. Он нам понадобится для отправки данных о температуре в облако.
прошивка NodeMCU
NodeMCU (https://github.com/nodemcu/nodemcu-firmware) – это прошивка, позволяющая запускать Lua скрипты на ESP8266. Загружаем последний NodeMCU Flasher (https://github.com/nodemcu/nodemcu-flasher) и запускаем его.
Подключаем GPIO0 на землю. Выбираем нужный COM порт и скорость 74880 или 115200. Нажимаем Flash и передергиваем питания на ESP8266. Если прошивка не запускается, проверяем корректность подключения RX, TX, запустив PuTTY на скорости 74880. В момент подачи питания в консоль должна выводиться строка типа “ets Jan 8 2013, rst cause: 1, boot mode: (1,0)“. После корректной прошивки отключаем GPIO0 от земли.


Рисунок 5 – Прошивка ESP8266

Заливка Lua скриптов и запуск
Скачиваем и запускаем LuaLoader (http://benlo.com/esp8266/index.html#LuaLoader). Выбираем COM-порт и скорость 9600, если нет соединения – пробуем передернуть питания модуля ESP8266. Проверяем соединение, нажав на кнопку ChipID. В консоль должен вывестись идентификатор чипа

= node.chipid()
10371968

Заливаем необходимые файлы (кнопка UploadFile):
1. ds18b20.lua – библиотека для взаимодействия с DS18B20;
2. httpsender.lua – наш скрипт, который читает данные температуры и отправляет их на thingspeak.com. Не забываем заменить YOURAPIKEY на свой ключ.
gpio = 6 – при подключении датчика к GPIO12, в случае GPIO0 – gpio = 3 (таблица – https://github.com/nodemcu/nodemcu-firmware/blob/master/README.md):

gpio = 6
require('ds18b20')
ds18b20.setup(gpio)

function sendData()
t=ds18b20.read()
print("Temp:"..t.." C\n")
-- conection to thingspeak.com
print("Sending data to thingspeak.com")
conn=net.createConnection(net.TCP, 0)
conn:on("receive", function(conn, payload)
print(payload) end)
-- api.thingspeak.com 184.106.153.149
conn:connect(80,'184.106.153.149')
conn:send("GET /update?key=YOURAPIKEY&field1="..t.." HTTP/1.1\r\n") conn:send("Host: api.thingspeak.com\r\n")
conn:send("Accept: */*\r\n")
conn:send("User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n")
conn:send("\r\n")
conn:on("sent",function(conn)
print("Closing connection")
conn:close()
end)
conn:on("disconnection", function(conn)
print("Got disconnection...")
end)
end

-- send data every 60000 ms to thing speak
tmr.alarm(0, 60000, 1, function() sendData() end )

3. init.lua – скрипт, инициализирует Wi-Fi и запускает httpsender.lua. Не забываем прописать свои SSID и пароль для Wi-Fi:

print("Setting up WIFI...")
wifi.setmode(wifi.STATION)
--modify according your wireless router settings wifi.sta.config("SSID","SSIDPASSWD")
wifi.sta.connect()
tmr.alarm(1, 1000, 1, function()
if wifi.sta.getip()== nil then
print("IP unavaiable, Waiting...")
else
tmr.stop(1)
print("Config done, IP is "..wifi.sta.getip())
dofile("httpsender.lua")
end

В результате имеем:

graph

Оставить ответ

Обязательные поля помечены*

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.