Как быстро, без особых вложений, начать выкладывать метеоданные на народный мониторинг?
Опишу одно из решений на базе ESP8266.

Алгоритм работы простой: контроллер раз в пять минут подключается к wi-fi, соединяется с брокером, замеряет температуру и шлет её брокеру. В остальное время находится в режиме сна.
Данная статья не рассматривает вопросы установки micropython на esp8266 и физического подключения датчика. Это всё легко гуглится.

Начнем реализацию с отладки режима сна и периода включения.

import machine
rtc = machine.RTC()
rtc.irq(trigger=rtc.ALARM0, wake=machine.DEEPSLEEP)
rtc.alarm(rtc.ALARM0, 5*60*1000)
#теперь при вызове deepsleep контроллер уснёт на 5 минут и загрузится заново, аналогично нажатию reset
#не забудьте припаять wake на reset, на плате LoLin: D0 и RST
machine.deepsleep()

Далее настроим подключение к wi-fi сети:

import network
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('SSID', 'password')
while not sta_if.isconnected():
	pass

Проверяем всё через REPL, что sta_if.isconnected() возвращает True.

Теперь предлагаю узнать мак адрес esp8266, он пригодится далее:

import network
import ubinascii
ubinascii.hexlify(network.WLAN().config('mac'),':').decode()

Далее нужно зарегистрироваться на сайте народного мониторинга
Далее датчики -> добавить моё устройство -> вводим наш MAC.

Теперь самое интересное, отправка температуры по MQTT:

#подключение к брокеру
from umqtt.simple import MQTTClient
client=MQTTClient(client_id='01:02:03:04:05:06', server='narodmon.ru', port=1883, user='login', password='12345')
client.connect()

#замер температуры
import onewire
ow=onewire.OneWire(machine.Pin(0))
import ds18x20
ds=ds18x20.DS18X20(ow)
roms=ds.scan()
ds.convert_temp()
time.sleep_ms(750)
temperature=ds.read_temp(roms[0])

#отправка
client.publish('dinartal/esp8266/temperature', str(temperature))
#ожидание отправки
time.sleep(3)

Смотрим в лог через repl, если всё норм, то можно идти любоваться показаниями на народном мониторинге.

image

PS: Если собрать нормальную схему, без моста usb-uart, и линейного стаба с плохим кпд то от батареек такой девайс сможет показать хорошую автономность.

Комментарии (6)


  1. de1m
    05.11.2017 15:35

    а хорошая автономность это сколько? Я как-то тоже думал свою поделку сделать только с батарейкой, но я так посчитал и по времени автономности получалось не очень.


    1. BurlakovSG
      07.11.2017 12:00

      Я бы не назвал это хорошей автономностью. У меня от двух аккумуляторов АА с повышающим DC-DC плата ESP8266 без светодиода (выпаял) и подключённой к ней BME280+BH1750+ ADS1115 продержалась чуть более месяца. Из глубокого сна выходила раз в пять минут. Питанием сенсоров управлял GPIO, т.е. питания на сенсорах нет когда ESP спит.


  1. dinartal Автор
    05.11.2017 15:40

    Сейчас плата LoLin потребляет 5В 30мА пока спит и до 200мА при работе. Хорошая автономность если год сможет без замены батареи работать. Над другую схему, у есп8366 10мкА в deep sleep по даташиту.


  1. dinartal Автор
    05.11.2017 17:37

    По ethernet можно и по PoE питать


  1. npdone
    05.11.2017 17:46

    Вам надо дополнительный микроконтроллер stm32 у него потребление меньше 1 микроампер. Так было сделано в idnd.ru и живёт от таблетки 2032


  1. snowSTAFF
    06.11.2017 11:55

    Micropython вот для таких вот игрушек подходит замечательно. Это очень просто и быстро прототипируется. Но за это платишь быстродействием и ограничением памяти.
    А вообще, MPy действительно удобный инструмент, при этом его номенклатура расширяется