用 Python 构建 IoT 温度计:Zerynth 完整指南
组件与物料
| MikroE Flip & Click | × | 1 |
| Arduino Due | × | 1 |
| Particle Photon | × | 1 |
| NodeMCU ESP8266 Breakout Board | × | 1 |
| SparkFun Photon RedBoard | × | 1 |
| MikroE Temp&Hum Click (HTS221) | × | 1 |
| MikroE WiFi Plus Click (MRF24WB0MA) | × | 1 |
| Espressif Wemos D1 Mini | × | 1 |
| Arduino Zero | × | 1 |
应用与在线服务
| Zerynth Studio (IDE) |
项目详解
Zerynth App 简介
Zerynth App 是面向 Android 与 iOS 的移动应用,支持为 IoT 项目 快速原型开发 图形界面。它能将手机变身为智能物联设备的控制器与显示终端,实现 Zerynth 编程设备与手机的双向通信。
本教程将演示如何用 Zerynth 驱动的单片机 + Zerynth App 开发一款简易而强大的 IoT 温度计。
所需材料
首先需要一块 Zerynth 支持的 32 位单片机板。我们选用 Mikroelektronika Flip&Click,它兼容 Arduino 生态,核心为 Microchip AT91SAM3X8E(即 Arduino Due 核心)。
- 温湿度传感器:Temp&Hum Click (HTS221)
- 联网模块:WiFi Plus Click (MRF24WB0MA + MCW1001 TCP/IP 协议栈)
- 软件:Zerynth Studio (Python 嵌入式 IDE) 与 Zerynth App (手机端)
硬件组装
Flip&Click 正面是 Arduino 兼容接口,背面有四个 mikroBUS 插槽(缩小版 Shield)。将 Temp&Hum Click 插入槽位 A,WiFi Plus Click 插入槽位 B 即可。
用 Python 编程 IoT 温度计
克隆示例工程
安装 Zerynth Studio 并创建账号后,克隆示例 “Zerynth App Oscilloscope”。查看 main.py 原始代码:
################################################################################
# IoT Thermometer
################################################################################
from wireless import wifi
# 原示例基于 Particle Photon,需更换 WiFi 驱动
from broadcom.bcm43362 import bcm43362 as wifi_driver
import streams
import adc
from zerynthapp import zerynthapp
streams.serial()
sleep(1000)
print("STARTING...")
try:
zapp = zerynthapp.ZerynthApp("DEVICE UID", "DEVICE TOKEN", log=True)
wifi_driver.auto_init()
for i in range(5):
try:
wifi.link("SSID", wifi.WIFI_WPA2, "PASSWORD")
break
except Exception as e:
print("Can't link", e)
else:
print("Impossible to link!")
while True: sleep(1000)
zapp.run()
while True:
sleep(1000)
x = (adc.read(A4)*100)//4096
zapp.event({"data": x})
if x > 95:
zapp.notify("ALARM!", "The value is greater than 95!")
except Exception as e:
print(e)
替换 WiFi 驱动与引入传感器库
将 WiFi 驱动改为 MCW1001A:
from microchip.mcw1001a import mcw1001a as wifi_driver
wifi_driver.init(SERIAL2, D24) # 槽位 B
引入 HTS221 库并初始化:
from stm.hts221 import hts221
temp_hum = hts221.HTS221(I2C0, D21) # 槽位 A
读取温湿度:
tmp, hum = temp_hum.get_temp_humidity()
配置 WiFi SSID 与密码
wifi.link("SSID", wifi.WIFI_WPA2, "PASSWORD")
创建并配置连接设备
在 Zerynth Studio ADM 面板创建“Connected Device”,获取 Device UID 与 Token。IP 地址用于不支持主机名解析的网络驱动(本例为 178.22.65.123)。
创建、上传与设置模板
Zerynth App 使用 HTML/CSS/JS 构建响应式 GUI,无需原生代码。模板托管于 ADM 沙箱,包含 index.html 等静态资源,引入 ADM JS 库即可与设备双向通信。
上传脚本至设备
修改后的完整 main.py:
################################################################################
# IoT Thermometer
################################################################################
from wireless import wifi
from microchip.mcw1001a import mcw1001a as wifi_driver
import streams
import adc
streams.serial()
from zerynthapp import zerynthapp
from stm.hts221 import hts221
temp_hum = hts221.HTS221(I2C0, D21) # slot A
sleep(1000)
print("STARTING...")
try:
zapp = zerynthapp.ZerynthApp("DEVICE UID", "DEVICE TOKEN", ip="178.22.65.123", log=True)
wifi_driver.init(SERIAL2, D24) # slot B
for i in range(5):
try:
wifi.link("SSID", wifi.WIFI_WPA2, "PASSWORD")
break
except Exception as e:
print("Can't link", e)
else:
print("Impossible to link!")
while True: sleep(1000)
zapp.run()
while True:
sleep(1000)
tmp, hum = temp_hum.get_temp_humidity()
print("Temp is:", tmp, "Humidity is:", hum)
try:
zapp.event({"data": tmp})
except Exception as e:
print(e)
if tmp > 30:
try:
zapp.notify("ALARM!", "High Temperature!")
except Exception as e:
print(e)
except Exception as e:
print(e)
将 DEVICE UID、DEVICE TOKEN、SSID、PASSWORD 替换为实际值,即可上传烧录。
在 Zerynth App 查看仪表盘
打开 Zerynth App,登录并选择设备,即可看到 IoT 温度计仪表盘。支持推送通知:温度超阈值(示例 >30℃)时手机收到报警。
如有疑问,欢迎在 Zerynth 社区论坛讨论。Enjoy!
完整代码
################################################################################
# Zerynth App Oscilloscope
################################################################################
from wireless import wifi
from microchip.mcw1001a import mcw1001a as wifi_driver
import streams
import adc
streams.serial()
from zerynthapp import zerynthapp
from stm.hts221 import hts221
temp_hum = hts221.HTS221(I2C0, D21) # slot A
sleep(1000)
print("STARTING...")
try:
zapp = zerynthapp.ZerynthApp("DEVICE UID", "DEVICE TOKEN", ip="178.22.65.123", log=True)
wifi_driver.init(SERIAL2, D24) # slot B
for i in range(5):
try:
wifi.link("SSID", wifi.WIFI_WPA2, "PASSWORD")
break
except Exception as e:
print("Can't link", e)
else:
print("Impossible to link!")
while True: sleep(1000)
zapp.run()
while True:
sleep(1000)
tmp, hum = temp_hum.get_temp_humidity()
print("Temp is:", tmp, "Humidity is:", hum)
try:
zapp.event({"data": tmp})
except Exception as e:
print(e)
if tmp > 30:
try:
zapp.notify("ALARM!", "High Temperature!")
except Exception as e:
print(e)
except Exception as e:
print(e)
原理图
制造工艺
- 温度计:从伽利略温度计到现代数字传感器的演进
- 树莓派配合 TMP006 红外温度传感器:Python 库与安装指南
- 树莓派与 Python 构建远程温度传感器:分步实战指南
- 掌握 PSoC 6 Pioneer 开发板与 IoT 扩展盾:开发者指南
- 基于 Arduino 与 Python 的可靠 RFID 考勤系统
- 物联网如何重塑日常生活
- Windows 安装 Python 与 PyCharm 完整图文教程
- Python 重命名文件与目录:os.rename() 分步指南
- Python 与 Selenium 自动化 Facebook 登录:分步指南
- Python 计算平均值:从循环到 NumPy 的四种实战方法
- Python 字符串标题化:快速可靠的 Title Case 转换
- Python 发送邮件实战:SMTP 协议快速上手指南