文章目录▼CloseOpen
- 新手学物联网源码,最容易踩的3个坑(我带实习生踩过的)
- 跟着做,你也能做出“能跑的”物联网装置(附源码修改指南)
- 第一步:买对材料(别买贵的,新手用基础款就行)
- 第二步:接好线(照着表格接,别瞎猜)
- 第三步:修改源码(只改2处,新手也会)
- 源码里的“关键逻辑”,用“人话”拆开给你看
- Arduino IDE的ESP32扩展包怎么装啊?
- 买DHT11温湿度传感器要注意什么?
- 源码里需要修改哪些地方啊?
- 连不上MQTT服务器怎么办?
- 传感器读不到数据怎么排查?
- 改WiFi信息:找到
const char ssid = "你的WiFi名字";
,把引号里的改成你家WiFi的SSID(比如“XX的小破网”);再找到const char password = "你的WiFi密码";
,改成密码(别加空格!)。 - 改MQTT服务器信息:如果用OneNet平台,找到
const char mqtt_server = "183.230.40.39";
(OneNet的MQTT地址),const char client_id = "你的设备ID";
(在OneNet上创建设备后能拿到)——这些信息OneNet官网有详细教程,你跟着填就行。 void setup()
:开机前的“准备工作”
我太懂这种感受了——去年我带3个刚毕业的实习生,他们连“引脚”是什么都不知道,跟着网上的教程做,结果要么传感器烧了,要么源码编译失败,急得直掉眼泪。后来我干脆自己写了套教程,把环境配置、源码注释、调试技巧全揉进去,两周后他们居然做出了能实时传温湿度到手机的小装置。今天我把这套“保姆级”教程掏出来,连完整可运行的源码都给你,保证你跟着做,不用猜也能搞定第一个物联网项目。
新手学物联网源码,最容易踩的3个坑(我带实习生踩过的)
很多人学不会,不是因为“笨”,是踩了新手都会犯的错——我把去年3个实习生的“翻车经历”整理成3个坑,你避开就能少走90%的弯路。
第一个坑:源码抄了,但“环境没配对”
去年有个实习生,跟着某博客的教程抄了ESP32的温湿度代码,结果一直报“找不到头文件”的错,急得直哭。后来我一看:他居然没装Arduino IDE的ESP32扩展包!很多教程默认你“已经会配环境”,但新手哪知道啊?
为什么环境配置这么重要?就像你煮面要先烧水——不同的开发板(比如ESP32和Raspberry Pi)需要不同的编译环境,没装对应扩展包,源码根本没法编译。Arduino官方文档里明确说:“未安装开发板包的情况下,任何ESP32源码都无法运行”——别嫌麻烦,先把环境配好:打开Arduino IDE,点“文件-首选项”,在“附加开发板管理器网址”里贴https://dl.espressif.com/dl/package_esp32_index.json
(加了nofollow,放心点),再去“工具-开发板管理器”搜“ESP32”安装,这一步做对,能解决80%的编译报错。
第二个坑:源码没注释,根本看不懂“为什么这么写”
我之前下载过某技术博客的源码,里面全是void setup()
void loop()
,没有一句注释,我都得猜“这行是连WiFi?那行是读传感器?”更别说新手了。去年有个实习生,抄了源码后问我:“老师,client.connect()
是做什么的?”我一看,源码里没注释,他根本不知道这行是连接MQTT服务器的。
这次我给你的源码,每一行都加了“人话注释”——比如// 改成你家WiFi的名字,别写错!
// 读取DHT11的温湿度,引脚是D4
,你不用懂“头文件”“函数”,跟着注释改就行。我甚至把“容易写错的地方”标成了红色,比如“WiFi密码别加空格”“传感器引脚别接反”,就怕你踩坑。
第三个坑:只看源码,没学“怎么调试”
有个实习生更冤:做出的装置传的数据全是“0℃”,以为是传感器坏了,结果我用Arduino IDE的“串口监视器”一看——他把传感器的VCC接成GND了!传感器直接短路,数据当然是错的。
调试是学源码的“核心技能”,就像医生看病要“拍CT”——串口监视器能显示代码运行的实时日志,比如“WiFi连接成功”“传感器读取失败”“MQTT连接超时”,这些信息能帮你快速定位问题。我 你每次上传源码后,先打开串口监视器(波特率选115200),看看有没有报错——去年那3个实习生,学会用串口监视器后,解决问题的速度快了3倍。
跟着做,你也能做出“能跑的”物联网装置(附源码修改指南)
说了这么多坑,现在直接给你“能落地的步骤”——我以“ESP32+DHT11温湿度传手机”为例,连源码带修改方法全给你,保证你复制就能跑。
第一步:买对材料(别买贵的,新手用基础款就行)
很多新手一开始就买“ Raspberry Pi 4”“工业级传感器”,结果根本用不上。我给你列了份“新手必买清单”,加起来不到50块:
材料名称 | 作用 | 推荐型号 | 价格范围 |
---|---|---|---|
ESP32开发板 | 核心控制单元(连WiFi、传数据) | ESP32 Dev Module | 25-35元 |
DHT11温湿度传感器 | 检测环境温湿度 | DHT11(3针) | 3-5元 |
Micro USB线 | 给ESP32供电+传数据 | 普通安卓线(支持数据传输) | 家里现成的 |
注意:别买“5V的DHT11”,ESP32的3.3V引脚带不动,会烧传感器——去年有个实习生就犯过这错,传感器直接冒烟,吓得他把开发板扔了。
第二步:接好线(照着表格接,别瞎猜)
传感器和ESP32的连线是“死亡环节”,新手最容易接反。我把引脚对应关系做成了表格,你照着接就行:
DHT11引脚 | ESP32引脚 | 注意事项 |
---|---|---|
VCC(红) | 3.3V(板上标了“3.3V”) | 不要接5V,会烧传感器! |
GND(黑) | GND(板上标了“GND”) | 必须接,不然电路不通! |
DATA(黄) | D4(板上标了“D4”) | 别接错引脚,不然读不到数据! |
第三步:修改源码(只改2处,新手也会)
我给你的源码里,只有2处需要改——其他都是现成的,连注释都标好了:
改完后,打开Arduino IDE,选对开发板(工具-开发板-ESP32 Arduino-ESP32 Dev Module),端口选电脑识别的COM口(比如COM3),点“上传”——等个1分钟,要是看到“上传成功”,恭喜你,第一步完成了!
为什么要改这些? 我用大白话给你讲:ESP32需要连WiFi才能把数据传到云端(比如OneNet),而ssid和password是“WiFi的钥匙”;mqtt_server是“云端的地址”,client_id是“你的设备身份证”——就像你要寄快递,得写对收件人地址和姓名,不然快递员找不到地方。
源码里的“关键逻辑”,用“人话”拆开给你看
很多新手学完后,换个传感器就不会了——因为你没懂“源码的逻辑”。今天我把源码里的3个核心部分拆开,用“日常场景”讲给你听,保证你下次换传感器也会写。
你可以把void setup()
理解为“早上出门前的准备”——比如连WiFi、初始化传感器、连接MQTT服务器,这些事只做一次。比如源码里的:
void setup() {
Serial.begin(115200); // 打开串口监视器,波特率115200
WiFi.begin(ssid, password); // 连接WiFi
while (WiFi.status() != WL_CONNECTED) { // 等待连接成功
delay(500);
Serial.print(".");
}
dht.begin(); // 初始化DHT11传感器
client.setServer(mqtt_server, 6002); // 连接OneNet的MQTT服务器
}
这些代码的作用,就像你早上“穿衣服→刷牙→拿钥匙→出门”——不做这些,你根本没法去上班。
void loop()
:重复做的“正事” void loop()
是“出门后的重复动作”——比如每隔2秒读一次温湿度,然后传到云端。比如源码里的:
void loop() {
if (!client.connected()) { // 如果没连到MQTT服务器,重新连
reconnect();
}
client.loop(); // 保持MQTT连接
float h = dht.readHumidity(); // 读湿度
float t = dht.readTemperature(); // 读温度
if (!isnan(h) && !isnan(t)) { // 如果读到有效数据
String temperature = String(t);
String humidity = String(h);
client.publish("temperature", temperature.c_str()); // 发温度到云端
client.publish("humidity", humidity.c_str()); // 发湿度到云端
}
delay(2000); // 每隔2秒读一次
}
这部分的逻辑,就像你“上班时每隔一小时看一次手机”——持续做,直到下班(断电)。
reconnect()
:断连后的“重新连接” 很多新手的装置“突然连不上云端”,就是因为没写reconnect()
函数。这个函数的作用是“如果MQTT断了,自动重新连”——就像你微信掉线了,会自动重连。比如源码里的:
void reconnect() {
while (!client.connected()) { // 直到连接成功
Serial.print("Attempting MQTT connection...");
if (client.connect(client_id)) { // 连接成功
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000); // 5秒后重试
}
}
}
怎么样?是不是觉得“原来物联网源码也没那么难”?我把完整的源码、环境配置教程、OneNet平台使用指南,全放在了我的公众号里——回复“物联网源码”就能领。
记住:学物联网不是“靠天赋”,是“靠有人把复杂的事掰碎了讲”。你可以试着把DHT11换成光敏传感器(检测光线强度),改改源码里的dht.begin()
成“光敏传感器的初始化代码”,看看能不能成功——去年有个实习生,这么改了后,做出了“光线暗时自动开灯”的小装置,高兴得拍了朋友圈。
如果你按这些方法试了,欢迎回来告诉我效果!要是遇到“编译报错”“连不上WiFi”的问题,直接在评论区留截图,我帮你解决—— 我也是从“连引脚都不懂”的阶段过来的,太懂你的不容易了。
本文常见问题(FAQ)
Arduino IDE的ESP32扩展包怎么装啊?
打开Arduino IDE,点“文件-首选项”,在“附加开发板管理器网址”里贴https://dl.espressif.com/dl/package_esp32_index.json(加了nofollow,放心贴),然后去“工具-开发板管理器”搜“ESP32”,找到对应的扩展包点安装就行。这步一定要做,不然ESP32的源码根本编译不了,我去年带的实习生就是没装这个,一直报“找不到头文件”的错。
买DHT11温湿度传感器要注意什么?
别买5V的!ESP32的3.3V引脚带不动5V的DHT11,会烧传感器——去年有个实习生就踩过这坑,传感器直接冒烟了。就买3针的普通DHT11,价格3-5块钱,新手用完全够。
源码里需要修改哪些地方啊?
就2处,特别简单。第一处是WiFi信息:找到“const char ssid = “你的WiFi名字”;”和“const char password = “你的WiFi密码”;”,把引号里的改成你家WiFi的SSID和密码,别加空格啊。第二处是MQTT服务器信息:如果用OneNet平台,就把“const char mqtt_server = “183.230.40.39”;”(这是OneNet的MQTT地址)和“const char client_id = “你的设备ID”;”改成你在OneNet上创建设备的信息,这些在OneNet官网教程里能找到。
连不上MQTT服务器怎么办?
先检查这2点:一是MQTT服务器地址对不对,比如OneNet的是183.230.40.39,别写错;二是client_id是不是你在平台上创建设备的ID,有没有输错。另外源码里有个reconnect函数,会自动重试连接,要是还连不上,打开串口监视器看日志,里面会显示“连接失败”的原因,比如“client_id错误”或者“服务器超时”,跟着排查就行。
传感器读不到数据怎么排查?
先看连线对不对——DHT11的VCC要接ESP32的3.3V,GND接GND,DATA接D4,别接反了。然后打开Arduino IDE的串口监视器(波特率选115200),看有没有“传感器读取失败”的提示,如果有,可能是传感器坏了或者电源没接好。我去年带的实习生就是把DATA引脚接错了,结果一直读不到数据,改回D4就好了。