学 IoT 最容易卡在两处:手里有 ESP32,却不知道下一个小项目做什么;网上能找到零散代码,却找不到接线、程序和运行结果放在一起的例子。
这个仓库把这条练习路线铺得比较完整:100 个带 README 的小项目,覆盖 ESP32 、 ESP8266 、 Raspberry Pi Pico/Pico W,以及 MicroPython 。每个项目通常都有 main.py、说明文档和电路图,部分项目还提供 Wokwi 模拟。
它适合当成一份"今天做什么"的练习清单。不要把它看成一套已经封装好的 IoT 产品。
仓库的项目顺序大致沿着这条线展开:
-
• GPIO 、按钮、 LED 、蜂鸣器;
-
• ADC 和电位器,再到 PWM 调光、舵机和步进电机;
-
• DHT11 、 PIR 、红外、超声波、气体、土壤湿度等传感器;
-
• OLED 、 LCD 、七段数码管和 LED 矩阵;
-
• Wi-Fi 、 Web Server 、 WebSocket 、蓝牙和 ESP-NOW;
-
• Blynk 、 MQTT 、 Node-RED 、 ThingSpeak 等联网项目;
-
• 数据记录、 Matplotlib 实时图表,以及 Wokwi 模拟测试。
这份清单的优点不在于每个项目都复杂,而在于它把"读一个值"和"做出一个能看的东西"连了起来。
例如,DHT11 项目不是只在串口打印温湿度。 ESP32 连接局域网后,在 80 端口启动一个简单 Web Server,浏览器打开开发板 IP,就能看到温度和湿度页面,页面每 3 秒刷新一次。

对应的最小代码思路很直白:传感器接 GPIO4,连接 Wi-Fi,读取 DHT11,再把数据嵌进 HTML 。
import machine
import network
import time
import socket
import dht
sensor = dht.DHT11(machine.Pin(4))
SSID = "your_network_name"
PASSWORD = "your_network_password"
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(SSID, PASSWORD)
while not wifi.isconnected():
time.sleep(1)
addr = socket.getaddrinfo("0.0.0.0", 80)[0][-1]
server = socket.socket()
server.bind(addr)
server.listen(1)
while True:
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
client, addr = server.accept()
client.recv(1024)
response = f"<h1>{temp} °C / {hum} %</h1>"
client.send("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n")
client.send(response)
client.close()
这段示例省略了完整页面和异常处理,完整版本在仓库对应目录里。它能帮助初学者看明白一件事:Web 仪表盘并不神秘,本质上是开发板读取数据,再把数据放进 HTTP 响应。
常见模块都有可照着接的版本
PIR 项目把"检测到动作后亮灯"这类数字输入做成了完整例子;超声波项目则用 HC-SR04 测距离,再按距离范围控制 LED 指示。两者都带有电路图,适合在 GPIO 读写之后继续练习。


做这些项目时,建议把每个目录拆成三层看:
-
README.md:先确认开发板、模块、引脚和运行方式;
-
Circuit_Diagram:按图接线,先不要急着改代码;
-
Main Files:找到main.py,再看是否需要额外的驱动文件,例如 LCD 、 OLED 或 MQTT 库。
仓库里也有一些更接近"系统"的例子,例如 ESP32 热点、网页控制继电器、 MQTT 控制 NeoPixel 、 ESP-NOW 双节点通信和带图表的环境监测。它们把单个传感器练习推进到"设备之间传数据"这一步。
最省事的上手路线
如果手边有 ESP32 和 DHT11,可以按下面的顺序走:
-
- 给 ESP32 刷入 MicroPython 固件;
-
- 用 Thonny 或其他串口工具连接开发板;
-
- 先跑一个 LED 或按钮项目,确认 GPIO 没问题;
-
- 按 DHT11 项目的接线图连接 3.3V 、 GND 和 GPIO4;
-
- 把
main.py上传到开发板;
- 把
-
- 只修改 Wi-Fi 名称和密码;
-
- 从串口输出里找到 ESP32 的局域网 IP,在同一网络的浏览器打开它。
如果暂时没有硬件,可以优先挑 README 标注了 Wokwi 的项目。模拟器适合先理解程序结构和引脚关系,但它不能替代真实传感器的供电、噪声、接触不良和电平检查。
这个仓库能帮你做到什么
它能帮你建立一套可重复的练习路径:从一个数字输入开始,到模拟量、 PWM 、显示屏、局域网服务和云平台连接。对于刚接触 MicroPython 的人,最有用的是每个项目都比较小,改一个引脚或换一个传感器,通常就能看见变化。
它还适合拿来做二次练习。比如把 DHT11 的网页显示改成 JSON,把 PIR 的 LED 提示改成 MQTT 消息,把超声波距离换成网页上的进度条。仓库的代码不负责替你完成这些改造,但它提供了足够多的起点。
有几件事要先说清楚
第一,这些示例不是生产级 IoT 系统。很多 Web Server 直接监听局域网端口,示例里也可能把 Wi-Fi 配置写在代码中。真实使用时要把密码移出代码,避免把开发板直接暴露到公网,并给控制继电器、电机等负载增加明确的权限和保护措施。
第二,仓库根目录没有统一的 LICENSE 。项目目录里能看到 MIT License,但不能据此推断所有未来新增内容都自动使用同一授权。要复用某个项目时,先查看对应目录的许可证文件。
第三,传感器的读数需要校准。 DHT11 精度有限,MQ 系列气体模块的模拟值也不能直接当成专业仪器读数。气体、门锁、继电器和电机项目更适合学习接线与控制逻辑,不应直接承担安全报警或高功率设备的唯一控制职责。
如果你手里已经有一块 ESP32,这个仓库的价值很实际:每天从一个能运行的小例子开始,先把输入、输出、网络和显示分别做一遍,再考虑自己的项目。比起一次性找一套"大而全"的教程,这种目录式练习更容易真正留下代码和接线经验。
项目地址:
https://github.com/kritishmohapatra/100\\_Days\\_100\\_IoT\\_Projects
MicroPython ESP32 固件: