从点亮LED到控制舵机:用树莓派Pico W和MicroPython实现你的第一个物联网项目

张开发
2026/4/10 15:59:13 15 分钟阅读

分享文章

从点亮LED到控制舵机:用树莓派Pico W和MicroPython实现你的第一个物联网项目
从点亮LED到控制舵机用树莓派Pico W和MicroPython实现你的第一个物联网项目当你第一次拿到树莓派Pico W这块小巧但功能强大的开发板时可能已经尝试过经典的Blink实验——让板载LED灯闪烁。这确实是个令人兴奋的开始但Pico W的真正魅力在于它能将你的创意延伸到物联网世界。想象一下躺在沙发上用手机就能控制房间里的智能灯或者远程监测阳台植物的土壤湿度这些场景现在都能用Pico W轻松实现。Pico W相比基础版Pico最大的升级就是集成了Wi-Fi功能这为物联网项目打开了大门。它保留了Pico系列的所有优点双核Cortex-M0处理器、丰富的GPIO接口、对MicroPython的良好支持同时增加了2.4GHz无线连接能力。最重要的是MicroPython让硬件编程变得像写Python脚本一样简单即使你没有嵌入式开发经验也能快速上手。1. 物联网项目基础准备在开始构建物联网项目前我们需要确保开发环境配置正确。与基础版Pico不同Pico W的Wi-Fi功能需要特定的MicroPython固件支持。前往MicroPython官网下载最新版本的Pico W专用固件文件通常命名为类似micropython-pico-w-version.uf2。硬件连接方面除了Pico W开发板本身你还需要微型USB数据线用于供电和编程面包板和跳线用于扩展电路LED灯和220Ω电阻基础输出设备SG90舵机用于进阶控制项目可选DHT11温湿度传感器用于环境监测项目软件工具链配置步骤如下按住BOOTSEL按钮连接Pico W到电脑释放按钮后会出现RPI-RP2存储设备将下载的UF2固件拖入该设备设备会自动重启安装Thonny IDE或配置VS Code的MicroPython插件在IDE中选择正确的解释器和串口设备验证Wi-Fi功能是否正常工作import network wlan network.WLAN(network.STA_IF) wlan.active(True) print(Wi-Fi芯片状态:, 已激活 if wlan.active() else 未激活)2. 构建Web控制LED系统让我们从最简单的物联网应用开始通过网页控制LED灯。这个项目将展示如何将硬件控制与网络服务结合是理解物联网基础架构的绝佳起点。2.1 硬件电路搭建选择GP15作为LED控制引脚避免使用板载LED的GP25以便更好地理解外部设备控制LED阳极通过220Ω限流电阻连接GP15LED阴极连接GND使用面包板稳妥地固定所有组件电路搭建完成后先用简单代码测试LEDfrom machine import Pin led Pin(15, Pin.OUT) led.value(1) # 点亮LED2.2 创建微型Web服务器MicroPython的microdot库非常适合构建轻量级Web服务。首先安装这个库import upip upip.install(microdot)然后创建基础Web服务from microdot import Microdot app Microdot() app.route(/) def index(request): return html body h1LED控制面板/h1 a href/onbutton开灯/button/a a href/offbutton关灯/button/a /body /html app.route(/on) def led_on(request): led.value(1) return LED已开启 app.route(/off) def led_off(request): led.value(0) return LED已关闭 app.run(port80)2.3 连接本地Wi-Fi网络为了使Web服务可访问需要将Pico W连接到路由器def connect_wifi(ssid, password): import network wlan network.WLAN(network.STA_IF) wlan.active(True) if not wlan.isconnected(): print(正在连接网络...) wlan.connect(ssid, password) while not wlan.isconnected(): pass print(网络配置:, wlan.ifconfig()) connect_wifi(你的Wi-Fi名称, 你的Wi-Fi密码)连接成功后记下分配的IP地址在同一网络下的任何设备浏览器中输入这个IP地址就能看到LED控制页面了。3. 进阶舵机远程控制系统掌握了基础Web控制后我们可以挑战更有趣的项目通过网页控制舵机角度。SG90舵机在机器人、智能家居中有广泛应用理解其控制原理很有价值。3.1 舵机工作原理与连接SG90舵机有三根线棕色GND接Pico的GND红色VCC接Pico的VSYS或外部5V电源黄色信号线接Pico的GP16舵机控制原理使用PWM脉冲宽度调制信号控制角度周期通常为20ms50Hz脉冲宽度在0.5ms-2.5ms之间对应0-180度硬件连接注意事项当控制多个舵机时建议使用外部电源确保共地连接Pico的GND与外部电源GND相连信号线无需上拉电阻3.2 PWM信号生成代码MicroPython提供了简单的PWM接口from machine import Pin, PWM servo PWM(Pin(16)) servo.freq(50) # 设置50Hz PWM频率 def set_angle(angle): pulse_width int(500 (2000 * angle / 180)) servo.duty_ns(pulse_width * 1000) # 转换为纳秒 # 测试代码 set_angle(90) # 转到中间位置3.3 网页控制界面增强改进之前的Web服务添加角度滑块控制app.route(/) def index(request): return html body h1舵机控制面板/h1 form action/set methodget input typerange nameangle min0 max180 value90 input typesubmit value设置角度 /form /body /html app.route(/set) def set_angle(request): angle int(request.args.get(angle, 90)) set_angle(angle) return f舵机已设置为{angle}度现在你不仅可以通过按钮开关LED还能用滑块精确控制舵机角度了。这个基础框架可以扩展为智能窗帘控制器、摄像头云台等实用项目。4. 数据上传与远程监控真正的物联网项目不仅需要控制设备还要能收集和传输数据。让我们实现一个温度监测系统将数据同时显示在本地网页和远程服务器上。4.1 连接DHT11温湿度传感器DHT11是性价比很高的环境传感器虽然精度不高但足以满足大多数业余项目。连接方式VCC接3.3VGND接GND数据线接GP17需要上拉电阻读取数据的代码import dht import machine sensor dht.DHT11(machine.Pin(17)) def read_sensor(): try: sensor.measure() temp sensor.temperature() humi sensor.humidity() return temp, humi except: return None, None4.2 本地数据展示扩展Web服务添加数据展示页面app.route(/env) def environment(request): temp, humi read_sensor() return fhtml body h1环境监测/h1 p温度: {temp}°C/p p湿度: {humi}%/p meta http-equivrefresh content5 /body /html页面会每5秒自动刷新显示最新数据。对于更实时的体验可以考虑使用WebSocket但在资源有限的Pico W上简单刷新已经足够。4.3 数据上传至云平台将数据同步到远程服务器可以实现真正的远程监控。使用urequests库发送HTTP请求import urequests import json def upload_data(temp, humi): url http://your-server.com/api/data data { device: pico-w-01, temperature: temp, humidity: humi } try: response urequests.post(url, jsondata) return response.status_code 200 except: return False在主循环中定期读取并上传数据import time while True: temp, humi read_sensor() if temp is not None: upload_data(temp, humi) time.sleep(300) # 每5分钟上传一次5. 项目优化与实用技巧当这些基础功能都能正常工作后可以考虑以下优化方案提升项目的稳定性和实用性。5.1 电源管理物联网设备通常需要长时间运行良好的电源管理很重要使用machine.deepsleep()在非活跃时段进入低功耗模式添加电容稳压电路防止电压波动考虑使用锂电池和充电电路实现移动供电深度睡眠示例import machine # 配置唤醒源如定时唤醒或引脚信号 rtc machine.RTC() rtc.irq(triggerrtc.ALARM0, wakemachine.DEEPSLEEP) rtc.alarm(rtc.ALARM0, 60000) # 60秒后唤醒 # 进入深度睡眠 machine.deepsleep()5.2 OTA空中下载更新远程更新代码可以避免每次修改都要物理接触设备在Web服务中添加固件上传接口使用micropython.mem_info()检查内存使用情况分段接收文件并写入存储验证完成后重启生效简易OTA实现片段app.route(/update, methods[POST]) def update_firmware(request): with open(main.py, wb) as f: f.write(request.body) return 固件更新成功请重启设备5.3 安全加固物联网设备面临各种网络威胁基础防护措施包括更改默认密码MicroPython REPL密码使用HTTPS与服务器通信需支持TLS的库实现请求频率限制防止DoS攻击敏感操作需要身份验证添加基础认证的Web路由from microdot import Response def require_auth(f): def wrapper(request): auth request.headers.get(Authorization) if auth ! Basic your_encoded_credentials: return Response(需要认证, 401, {WWW-Authenticate: Basic realmPico Control}) return f(request) return wrapper app.route(/admin) require_auth def admin_panel(request): return 管理员面板

更多文章