ESP32/ESP8266のMicroPythonのDHTセンサーデータをホストPCのpythonでMQTT受信する
2020/3/6
ESP32/ESP8266 MicroPython DHT Python MQTT test
ESP32/ESP8266 MicroPython DHT Python MQTT test
概要
ESP32/ESP8266のMicroPythonのDHTセンサーデータをホストPCのpythonでMQTT受信する。MicroPython側が送信側、ホストPCのpythonが受信側になる。
接続
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 |
受信側Pythonスクリプト
PY_MQTT_DHT_recv.py
#!usr/bin/env python
# -*- coding: utf-8 -*-
# receving DHT11 sensor data from ESP_MicroPython via MQTT
import paho.mqtt.client as mqtt
import json
def on_connect(client, userdata, flags, respons_code):
topic = 'DHT11'
print('watch %s' % topic)
client.subscribe(topic)
def on_message(client, userdata, msg):
#print(msg.topic + ' ' + str(msg.payload))
print(msg.topic+':')
parsed = json.loads(str(msg.payload))
print('time: '+parsed['time'])
print('Temperature: '+str(parsed['Temperature']))
print('Humidity: '+str(parsed['humidity']))
print('---------------------------')
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
#client.connect('5.196.95.208', 1883, keepalive=60)
client.connect('test.mosquitto.org', 1883, keepalive=60)
client.loop_forever()
該当ライブラリーは以下でインストールする:
pip install paho-mqtt
送信側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 を実行し、
受信側は
「python PY_MQTT_DHT_recv.py」を実行すると
以下のような実行画面になる:
ホストPCのシェル画面:
$ python PY_MQTT_DHT_recv.py
watch DHT11
DHT11:
time: 2020/3/6 21:56:0
Temperature: 18
Humidity: 13
---------------------------
DHT11:
time: 2020/3/6 21:56:2
Temperature: 18
Humidity: 13
---------------------------
...
おまけ(pythonの受信/送信サンプル)
送信サンプル:
PY_publisher.py
#!usr/bin/env python
# -*- coding: utf-8 -*-
import paho.mqtt.client as mqtt
client = mqtt.Client()
#client.connect('5.196.95.208', 1883, keepalive=60)
client.connect('test.mosquitto.org', 1883, keepalive=60)
for n in range(24):
client.publish('test/topic', 'hello world #'+str(n))
受信側サンプル:
PY_subsriber.py
#!usr/bin/env python
# -*- coding: utf-8 -*-
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, respons_code):
topic = 'test/topic'
print('watch %s' % topic)
client.subscribe(topic)
def on_message(client, userdata, msg):
print(msg.topic + ' ' + str(msg.payload))
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
#client.connect('5.196.95.208', 1883, keepalive=60)
client.connect('test.mosquitto.org', 1883, keepalive=60)
client.loop_forever()
参考情報
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のファイル操作とプログラム実行
以上
| 固定リンク
「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)
コメント