1. 项目准备:为什么选择这个组合?
大家好,我是老张,一个在嵌入式开发和物联网领域摸爬滚打了十多年的“老电工”。今天想和大家分享一个特别适合新手入门的物联网项目:用ESP32和微信小程序,通过MQTT协议,实现一个远程控制开关。听起来是不是有点酷?但别担心,整个过程就像搭积木一样,我会手把手带你走一遍。
你可能听说过ESP32,这个芯片功能强大又便宜,是物联网项目的明星。而MicroPython呢,它让写ESP32的代码变得像写Python脚本一样简单,不用再去折腾复杂的C语言编译环境。微信小程序就更不用说了,几乎人人手机里都有微信,用它来做控制端,用户连下载新APP都省了。最后,MQTT协议是物联网设备通信的“普通话”,轻量又高效。我们这次会用一个叫“巴法云”的免费平台来当MQTT的“中转站”(服务器),它帮我们省去了自己搭建服务器的麻烦。
这个组合的妙处就在于,它把几个对开发者最友好的技术拼在了一起。你不需要是网络协议专家,也不需要租用云服务器,更不用写复杂的手机APP。只需要一些基础的Python和JavaScript知识,就能快速搭建一个真正可用的远程控制系统。无论是想做个智能台灯、遥控小车,还是监控家里的温湿度,这个框架都是绝佳的起点。我自己带过不少学生和新人,用这个方案,最快的一个下午就能让灯亮起来,成就感满满。
接下来,我会从零开始,带你完成从设备端编程到小程序控制的全过程。过程中我会分享一些我踩过的坑和调试技巧,保证你跟着做一遍,不仅能成功,还能真正理解背后的原理。
2. 搭建舞台:注册巴法云与创建主题
万事开头难,但咱们这个开头特别简单。第一步,我们需要一个MQTT服务器来帮ESP32和小程序传递消息。自己搭建服务器太麻烦,所以我们直接用现成的服务。国内有好几个提供免费MQTT服务的平台,经过我实测,巴法云对个人开发者和小项目非常友好,免费额度足够用,而且接入文档很清晰。
首先,打开浏览器,搜索“巴法云”找到官网。点击注册,用你的邮箱或者手机号快速创建一个账号。登录之后,你会进入控制台界面。这里注意,巴法云提供了几种不同的服务,我们要用的是 “MQTT设备云”,别选错了。在设备云页面,你会看到一个醒目的按钮叫“创建主题”。这个“主题”是MQTT里一个核心概念,你可以把它理解为一个“聊天频道”或者“消息管道”。所有订阅了这个主题的设备,都能收到发往这个主题的消息。
给你的主题起个名字,比如“my_room_light”。名字最好有点意义,方便以后管理。创建成功后,控制台会显示这个主题,并且会给你两样至关重要的东西:Client ID 和 UID。请你立刻拿个小本本记下来,或者复制保存到文本文件里。Client ID 是ESP32设备连接服务器时的“身份证”,而 UID 是小程序连接时的“密钥”。它们就像是两把不同的钥匙,千万不能搞混,也不能泄露。
这里有个我踩过的坑要提醒你:巴法云的MQTT服务器地址是 bemfa.com,但它有两个端口。ESP32这种硬件设备,通常使用 TCP 连接,端口是 9501。而微信小程序由于网络限制,必须使用加密的 WebSocket 连接,端口是 9504,并且地址前缀是 wxs://。很多新手在这里栽跟头,设备死活连不上,就是因为端口和协议没选对。记住这个区别,后面写代码时会轻松很多。
3. 让设备上线:ESP32的MicroPython编程实战
设备端是我们的硬件基础,这一步我们要让ESP32活起来,连上Wi-Fi,并订阅我们在巴法云创建的主题。我假设你已经有一块ESP32开发板,并且已经按照官方教程刷好了MicroPython固件。如果还没做,去MicroPython官网下载固件,用ESPFlashTool之类的工具刷进去,过程很简单,这里就不展开了。
3.1 连接Wi-Fi与基础配置
我们先来写一个Python脚本,我把它命名为 main.py,这样ESP32上电就会自动运行。打开你喜欢的代码编辑器(Thonny、VS Code都可以),新建文件,开始写代码。首先,我们要引入必要的库。
from umqtt.simple import MQTTClient
import time
import network
from machine import Pin, Timer
import sys
接下来,是配置部分。这里需要你根据实际情况修改几个关键变量,我把它们放在代码开头,一目了然。
# ========== 需要你修改的部分 ==========
WIFI_SSID = "你的Wi-Fi名字" # 注意:ESP32通常不支持5G频段的Wi-Fi
WIFI_PASSWORD = "你的Wi-Fi密码"
CLIENT_ID = "你的Client_ID" # 从巴法云控制台获取
TOPIC = "你的主题名" # 例如:my_room_light
# ========== 通常不需要修改的部分 ==========
MQTT_SERVER = "bemfa.com"
MQTT_PORT = 9501 # 设备连接端口
LED_PIN = 2 # ESP32开发板上常见的内置LED引脚,通常是GPIO2
这里解释一下,CLIENT_ID 就是上一节从巴法云控制台拿到的那串字符。LED_PIN = 2 是针对大多数ESP32开发板的内置蓝色LED,如果你的板子不一样,可能需要查一下原理图更改这个引脚号。
3.2 编写核心连接与回调函数
配置好之后,我们写一个连接Wi-Fi的函数。这个函数很关键,网络不通,后面一切都白搭。


4698

被折叠的 条评论
为什么被折叠?



