« ESP32/ESP8266のMicroPythonとWeb-browserの間でMQTT通信をする | トップページ | ESP32/ESP8266のMicroPythonでRTCを現在時刻に合わせる方法 »

2020年3月 6日 (金)

ESP32/ESP8266のMicroPythonでDHTセンサーデータをMQTTで送信する

2020/3/5

ESP32/ESP8266 MicroPython DHT Web MQTT test

ESP32/ESP8266 MicroPython DHT Web MQTT test

概要

ESP32/ESP8266のMicroPythonでDHTセンサーデータをMQTTで送信する。
受信側はweb-browserを利用する。

接続

Grove-DHT11センサーをGrove-Base-Shield経由でGrove-D5-Slotに接続すると 以下のように接続したことになる。

Grove D5 solot

Arduino-Pin ESP8266
D5 IO04
D6 IO05(NOT USED)
VCC 3.3V
GND GND

受信側のhtmlスクリプト

MQTT_DHT_recv.html

<html> <script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script> <body> <script> document.body.innerHTML = ''; var consout = 'MQTT over WebSockets Test(DHT11 recv)'+'<br>' document.body.innerHTML = consout; //var mqtt = require('mqtt') var client = mqtt.connect('ws://test.mosquitto.org:8081') // subscribe Topic client.subscribe('DHT11'); client.on('message', function(topic, payload) { var sensor = JSON.parse(payload) // JSON parsing test console.log(sensor) consout += topic+':'+'<br>'+JSON.stringify(sensor)+'<br>' document.body.innerHTML = consout // disconnect //client.end(); }); </script> </body> </html>

送信側のmicropythonスクリプト

MQTT_DHT_send.py
以下は自分の環境に合わせる:
ssid = 'your_ssid'
password = 'your_passwd'

# boot.py ssid = 'your_ssid' password = 'your_passwd' mqtt_server = '5.196.95.208' # Complete project details at https://RandomNerdTutorials.com import time from umqttsimple import MQTTClient import ubinascii import machine import micropython import network import esp esp.osdebug(None) import gc gc.collect() client_id = ubinascii.hexlify(machine.unique_id()) last_message = 0 #message_interval = 5 counter = 0 station = network.WLAN(network.STA_IF) station.active(True) station.connect(ssid, password) while station.isconnected() == False: pass print('Connection successful') print(station.ifconfig()) #=========================================== from machine import RTC import utime import ntptime rtc = RTC() ntptime.settime() # setup time by remote NTP server def get_jst(): tm = utime.localtime(utime.time()) # UTC now jst = str(tm[0])+'/'+str(tm[1])+'/'+str(tm[2])+' '+str((tm[3]+9)%24)+':'+str(tm[4])+':'+str(tm[5]) return jst #=========================================== import ujson import dht from machine import Pin d = dht.DHT11(Pin(4)) message_interval = 1 # sec def connect_and_subscribe(): global client_id, mqtt_server, topic_sub client = MQTTClient(client_id, mqtt_server) # client.set_callback(sub_cb) client.connect() # client.subscribe(topic_sub) # print('Connected to %s MQTT broker, subscribed to %s topic' % (mqtt_server, topic_sub)) print('Connected to MQTT broker:'+mqtt_server) return client def restart_and_reconnect(): print('Failed to connect to MQTT broker. Reconnecting...') time.sleep(10) machine.reset() try: client = connect_and_subscribe() except OSError as e: restart_and_reconnect() while True: try: # client.check_msg() if (time.time() - last_message) > message_interval: dict = {} dict['time'] = get_jst() dict['sensorType'] = 'DHT11' d.measure() dict['Temperature'] = d.temperature() dict['humidity'] = d.humidity() msg = ujson.dumps(dict) topic = 'DHT11' print(topic+':'+msg) # debug client.publish(topic, msg) last_message = time.time() counter += 1 except OSError as e: restart_and_reconnect()

実行画面

ESP32/SP8266のMicroPython側は MQTT_DHT_send.py を実行し、
ブラウザー側は MQTT_DHT_recv.html を実行すると
以下のような実行画面になる:

MQTT_DHT_recv.html のブラウザー画面:

MQTT over WebSockets Test(DHT11 recv) DHT11: {"time":"2020/3/5 23:16:46","Temperature":15,"humidity":14,"sensorType":"DHT11"} DHT11: {"time":"2020/3/5 23:16:48","Temperature":15,"humidity":14,"sensorType":"DHT11"} DHT11: {"time":"2020/3/5 23:16:50","Temperature":15,"humidity":14,"sensorType":"DHT11"} DHT11: {"time":"2020/3/5 23:16:52","Temperature":15,"humidity":14,"sensorType":"DHT11"} DHT11: {"time":"2020/3/5 23:16:54","Temperature":15,"humidity":14,"sensorType":"DHT11"} DHT11: {"time":"2020/3/5 23:16:56","Temperature":15,"humidity":14,"sensorType":"DHT11"} DHT11: {"time":"2020/3/5 23:16:58","Temperature":15,"humidity":14,"sensorType":"DHT11"} ...

センサーデータはJSONフォーマットのものを(テストのために)パースしたものを再度JSONフォーマットにして表示している。

参考情報

MQTT.js

MQTT test server @mosquitto.org
The server listens on the following ports:
1883 : MQTT, unencrypted
8883 : MQTT, encrypted
8884 : MQTT, encrypted, client certificate required
8080 : MQTT over WebSockets, unencrypted
8081 : MQTT over WebSockets, encrypted

MQTT test server @eclipse.org
This is a public test MQTT broker service.
It currently listens on the following ports:
1883 : MQTT over unencrypted TCP
8883 : MQTT over encrypted TCP
80 : MQTT over unencrypted WebSockets (note: URL must be /mqtt )
443 : MQTT over encrypted WebSockets (note: URL must be /mqtt )

10 Free Public & Private MQTT Brokers(For Testing & Production)
http://www.mqtt-dashboard.com/
MQTT is a machine-to-machine (M2M)/"Internet of Things"

ESP32/ESP8266のMicroPythonでMQTTを使ってみた
MQTT(over WebSocket)をブラウザーで使ってみた

MicroPython – Getting Started with MQTT on ESP32/ESP8266

ESP32-DevKitC ESP-WROOM-32開発ボード
MicroPython - Quick reference for the ESP32
Streaming Data from ESP32 using MicroPython and MQTT
ampyを用いたMicroPythonのファイル操作とプログラム実行

以上

|

« ESP32/ESP8266のMicroPythonとWeb-browserの間でMQTT通信をする | トップページ | ESP32/ESP8266のMicroPythonでRTCを現在時刻に合わせる方法 »

linux」カテゴリの記事

MicroPython」カテゴリの記事

MQTT」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« ESP32/ESP8266のMicroPythonとWeb-browserの間でMQTT通信をする | トップページ | ESP32/ESP8266のMicroPythonでRTCを現在時刻に合わせる方法 »