пятница, 10 мая 2019 г.

Метеостанция на nodemcu (ESP8266).

Кратко опишу процесс создания метеостанции подключенной к narodmon.ru.

Один из самый дешевых модулей ESP8266.
Герметичный температурный датчик DS1820.

Заливаем micropython на нашу плату. Для этого подключаем плату через usb кабель к компьютеру(все действия я провожу в linux), в выводе dmesg видем, что устройство приаттачено к ttyUSB0:



Если не еще не установленна тулза для работы с платой, устанавливаем:

$ pip install esptool 
  подробней тут 

Загружаем дистрибутив micropython: Firmware for ESP8266 boards,
на момент написания статьи стабильная актуальная версия была esp8266-20190125-v1.10.bin

При необходимости затираем память нашей платы:

$ sudo  esptool.py --port /dev/ttyUSB0 erase_flash

и записываем микропайтон:

$ esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 esp8266-20190125-v1.10.bin

Подключаемся к плате:

$ sudo picocom /dev/ttyUSB0 -b115200

узнаем макадрес устройства, позже его введем в переменную client_id:


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

Включаем WebREPL(необходим для заливки скриптов), не буду описывать весь процесс, вот тут всё хорошо показано: https://learn.adafruit.com/micropython-basics-esp8266-webrepl/access-webrepl

Регистрируетесь на narodmon.ru

Пишем скрипт:


import time
import network
import onewire
import ds18x20
from umqtt.simple import MQTTClient

num = 1
while num < 10:
    sta_if = network.WLAN(network.STA_IF)
    sta_if.active(True)
    sta_if.connect('ВАША_WIFI_СЕТЬ', 'ПАРОЛЬ')
    while not sta_if.isconnected():
        pass

    client=MQTTClient(client_id='12:34:56:78:90:12', server='narodmon.ru', port=1883, user='ПОЛЬЗОВАТЕЛЬНАРОДМОН', password='ПАРОЛЬНАРОДМОН')
    client.connect()

    ow=onewire.OneWire(machine.Pin(12))
    ds=ds18x20.DS18X20(ow)
    roms=ds.scan()
    ds.convert_temp()
    time.sleep_ms(750)
    temperature=ds.read_temp(roms[0])


    client.publish('ВАШНИКНЕЙМ/НАЗВАНИЕДАТЧИКА/temperature', str(temperature))

    time.sleep(10)
    sta_if.disconnect()
    time.sleep(360)

Сохраняем в файл с именем main.py (именно файл с таким названием будет выполняться каждый раз при загрузке устройства).

Подключаемся по wifi к плате и через webrepl заливаем на него наш файл. Теперь когда вы подключитесь к плате по USB, чтобы работать с командной строкой интерпритатора не забудьте нажать ctrl+c, чтобы прервать бесконечный цикл скрипта main.py

Подключаем температурный датчик к плате:


 для получения данных использую пин D6, питание с пина 3V3, земля GND.
Имейте ввиду в данной плате нет RTC и поэтому советы типа отправлять плату в deep sleep для нее не актуальны, необходимо использовать внешний модуль RTC иначе плата просто не проснется. 

В двух словах как-то так. Есть вопросы? Спрашивайте в телеге https://t.me/mimokrokodil


Комментариев нет:

Отправить комментарий