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 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」カテゴリの記事
- platfomioを使ってnaitive(linux/windows)のプログラムをビルドする方法(2021.03.10)
- micro:bit Yotta開発ツール(linux版)(2021.01.09)
- PlatformIOをRaspberryPi4で動かしてみる(実験)(2020.10.20)
- headless RaspberryPiインストール方法(v2)(2020.10.20)
- wio-terminalのファームウェア・アップデートについて(linux版)(2020.10.15)
「MicroPython」カテゴリの記事
- microbit-v2にMicropythonをインストールする(2021.05.06)
- PicoボードのMicroPythonをVS_CodeのextensionのPico-Goでプログラミングする(2021.02.10)
- MicroPython/CircuitPython Performance Test(2021.02.07)
- PicoボードにMicropython/CircuitPythonをインストールする(2021.02.03)
- MicroPython(F767ZI) Network Samples(2021.01.03)
「MQTT」カテゴリの記事
- Wio-TerminalでMQTTを動かす(2022.01.20)
- Wio-Terminal/M5Atom/ESP8622/ESP32ボードを共通のスケッチで動かす(v2)(MQTT編)(2020.12.27)
- Wio-Terminal/ESP8622/ESP32ボードを共通のスケッチで動かす(MQTT編)(2020.07.21)
- Wio-TerminalでWiFiで使う(その5:MQTT)(2020.07.13)
- ESP-WROOM-02ボードでMQTTとMPL3115A2(気圧・高度・気温センサ)を動かす(Arduino版)(2020.07.05)
コメント