版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章物联网服务平台让Arduino上云:物联网平台·NodeMCU·ESP32·MQTT《Arduino应用技术(第二版)》·乐为物联·百度天工·阿里云·OneNet·NB-IoT·Cayenne高职电子信息类专业教学用本章学习目标①了解物联网平台②掌握Cayenne平台的使用③了解NodeMCU和ESP32开发板④了解MQTT协议及其使用⑤了解乐为物联云平台及其使用重点:MQTT协议、NodeMCU/ESP32开发板使用、乐为物联数据上传。注:教材正文止于5.4.3,5.5Cayenne以要点补充形式呈现。本章地图5.1物联网平台概述物联网由ITU提出;平台是网络架构与产业链的关键枢纽。5.2国内常见物联网平台百度天工、阿里云、QQ物联、中国移动OneNet、中国电信NB-IoT。5.3乐为物联云平台三层架构;注册设备传感器;LM35数据上传到云端。5.4ESP系列开发板与MQTTNodeMCU(ESP8266)与ESP32开发板;MQTT协议、代理平台与PubSubClient库应用。5.5Cayenne平台(要点补充)开源物联网可视化平台;教材正文缺失,本节提供学习目标引导的要点说明。学习路径:先建立"平台是承上启下关键"的整体认识,再逐一认识五大平台,随后动手在乐为物联上传数据,最后掌握ESP开发板与MQTT通信。5.1物联网平台概述2005ITU正式提出"物联网"416亿2025年全球设备预测物联网平台是网络架构与产业链条中的关键枢纽,实现终端设备"管理、控制、运营"一体化,为上层应用提供统一接口。中小企业的痛点缺少服务器、软硬件技术支持与资金独立建平台实施周期长、投入大,风险承受能力弱对物联网需求难以一次性准确把握开放物联网平台的价值国内乐为物联、美国Cosm等开放平台提升开发效率快速实现原型系统现场验证直接平台托管数据,降低风险、节省维护、减少成本5.2国内常见的物联网平台本节介绍五家国内主流物联网平台,了解各自的定位、优势与应用案例百度"天工"智能物联网平台:面向工业制造、能源、物流,端到云全栈,含物接入、物解析、物管理、时序数据库、规则引擎。阿里云物联网平台:2017年云栖大会发布,融合云上网关、规则引擎、共享智能平台,推动生活、工业、城市三大领域智联网建设。QQ物联智能硬件开放平台:2014年发布,将QQ账号体系、关系链、消息通道开放给智能硬件,实现用户与设备互联互通。中国移动OneNet:2014年上线,首家支持CoAP+LWM2M协议,具备流分析、设备云管理、多协议配置等功能。中国电信NB-IoT平台:2017年建成全球首个商用新一代窄带物联网网络,覆盖广、规模大、基于800MHz低频段质量更优。5.2.1–5.2.2百度天工与阿里云物联网平台百度"天工"智能物联网平台图5-1百度天工标志2016年7月推出,面向工业制造、能源、物流等行业,专注产业物联网。涵盖物接入、物解析、物管理、时序数据库、规则引擎五大产品,千万级设备接入、百万数据点每秒读写。应用案例:风力发电预测性维护,故障预测准确率提升至90%、召回率99%;太原铁路局利用大数据与机器学习,调度效率提升59%。阿里云物联网平台2017年10月云栖大会发布,将物联网打造为"智联网"。建设云端一体化使能平台、物联网市场、ICA全球标准联盟三大基础设施,推动生活、工业、城市三大领域智联网建设。应用案例:无锡鸿山物联网小镇,借助飞凤平台实现交通、环境、水务、能源等城市管理项目在线运营。5.2.3–5.2.5QQ物联·OneNet·电信NB-IoT图5-2QQ物联网平台QQ物联(2014):开放QQ账号体系、关系链、消息通道;硬件接入后可添加为"QQ好友",设备拥有在线状态与昵称。另有微信硬件平台。图5-3OneNet物联网平台标志中国移动OneNet(2014):首家支持CoAP+LWM2M、遵循IPSOProfile;一站式托管、多协议解析、数据存储与大数据分析。中国电信NB-IoT(2017):建成全球首个商用新一代窄带物联网网络。优势:覆盖广(4G/5G全覆盖)、规模大(31万台基站同步升级)、质量优(800MHz低频段,穿透力更强)。案例:中关村大街智能路灯、垃圾桶、井盖;厦门海沧智能独立烟感报警系统。5.3.1乐为物联云平台简介乐为物联隶属于北京乐为物联科技有限责任公司,提供高效实现物联网应用的平台,无需繁琐编程即可接入设备并完成数据存储、查询与分析。主要功能个人门户:管理设备、传感器与控制器数据存储与分析工业仪表无缝接入手机APP远程访问开放的API,可公开测量设备乐为物联网三层架构云端服务器(数据存储·分析)设备(GPRS·WiFi·以太网)传感器与控制器(RS232·RS485)传感器采集数据→设备上传云端→用户通过浏览器/APP访问数据库,实现多样数据应用。5.3.2乐为物联云平台操作在乐为物联网中实现应用,第一步是建立设备①注册:访问注册(邮箱激活),登录后进入"我的物联"。②添加设备:"我的设备"中编辑默认设备或"添加新设备",填写信息后保存。③添加传感器:"传感器与控制器"→"新建"→完整填写信息→保存。④添加控制器:步骤同传感器;其他功能(模拟数据、报警等)参照平台说明书。图5-6添加设备图5-7~10添加传感器和控制器要点:乐为平台以"设备→传感器/控制器"两级结构组织数据,先建设备再添加传感器或控制器。5.3.2乐为物联平台操作(二)新建控制器与传感器:为设备配置数据通道图5-10添加控制器图5-11新建设备5.3.2乐为物联平台操作(三)新建传感器并查看实时数据列表图5-12新建传感器乐为平台:传感器实时数据列表要点:LM35温度数据通过串口/网络上报后,在"实时数据"列表即可看到最新值与更新时间。5.3.3数据上传:LM35温度数据上云乐为物联·LM35温度上传(LeweiClient)#include<LeweiClient.h>#include<SPI.h>#include<Ethernet.h>#defineLW_USERKEY"***你的用户名***"#defineLW_GATEWAY"02"//设备标志#definePOST_INTERVAL(30*1000)//更新间隔30sLeWeiClient*lwc;voidsetup(){Serial.begin(9600);lwc=newLeWeiClient("***用户名***","02");}voidloop(){intsensorReading=analogRead(A0)*0.4882;Serial.println(sensorReading);if(lwc){Serial.print("***startdatacollection");lwc->append("lm35",sensorReading);//上传lm35Serial.print("***datasend***");lwc->send();Serial.print("***sendcompleted***");delay(POST_INTERVAL);}}准备与硬件注册账号并记录用户名、设备标志、传感器标志;W5100插Arduino,接网线,LM35接A0。lwc->append的传感器名称必须与服务器上的设置一致;analogRead×0.4882将ADC值换算为温度。5.4ESP系列开发板与MQTT通信乐鑫科技ESP系列芯片、模组、开发板三大类别ESP8266最早推出,ESP32全面升级,ESP32-S/C系列最新兼容ArduinoIDE、EspressifIDF、MicroPython开发板技术特性高性能、低功耗Wi-FiSoC(系统级芯片);内置2.4GHzWiFi接收发射,支持JSON、定时器、PWM、IIC、SPI、1-Wire、Net、MQTT等功能。适用于智能家居、智能穿戴、工业自动化等领域。MQTT协议MessageQueuingTelemetryTransport,消息队列遥测传输:轻量级、高效、可靠,特别适合资源受限的网络环境。发布/订阅模式设备通过发布者/订阅者/代理(Broker)三种角色高效通信;主题(Topic)标识消息类别。广泛应用于智能家居、工业自动化、智能农业、智能城市等。5.4.1NodeMCU开发板简介NodeMCU是一款基于ESP8266芯片(ESP-12E)的开源物联网开发板,集成2.4GHzWiFi收发器,支持MicroUSB上传程序。特点开源、交互式、可编程、低成本;内置JSON、定时器、PWM、IIC、SPI、1-Wire、Net、MQTT等,兼容ArduinoIDE。注意:D0(GPIO16)只能用作GPIO读/写,不支持中断,也不支持PWM/IIC/OW;ADC0为10位精度。图5-13NodeMCU实物板上设有Reset复位键、Flash固件更新键与MicroUSB端口(上传程序/充电)。5.4.1NodeMCU引脚定义NodeMCU提供了丰富的GPIO引脚,用于连接传感器、执行器等外部设备;常用引脚为D0~D8对应GPIO16、5、4、0、2、14、12、13、15。板载资源MicroUSB上传/充电、Reset复位、Flash更新固件、ADC0(10位)模拟输入。多数引脚支持IIC、SPI、1-Wire、PWM复用;D0例外。右侧为官方引脚定义图,注意丝印D编号与GPIO号的对应。图5-14NodeMCU引脚定义5.4.1用ArduinoIDE开发NodeMCU①连接:USB连接NodeMCU,通电蓝色板载LED闪烁(不保持点亮)。②驱动:安装CP2102或CH340串口驱动;③安装ArduinoIDE1.6.4以上。④索引:在"附加开发板管理器网址"添加ESP8266索引地址(见右图)。⑤安装:开发板管理器搜索"ESP8266"点击安装,网络耗时较长,报错则重试。⑥选板:重启IDE,在"工具"中选择NodeMCU板型并配置端口;注意会擦除原NodeMCU固件。图5-15添加ESP8266索引文件图5-16打开开发板管理器5.4.1NodeMCU:安装ESP8266库在开发板管理器中选择最新版本并点击"安装"图5-17安装ESP8266库步骤:工具→开发板→开发板管理器→搜索esp8266→安装。5.4.1NodeMCU:设置开发环境选择开发板型号与端口,并在首选项中配置网址图5-18设置ESP8266环境文件→首选项:添加开发板管理器网址要点:先添加开发板管理器网址,再通过开发板管理器安装库,最后选择端口下载。5.4.2ESP32开发板简介ESP32-DevKitC采用ESP32-WROOM-32模组,主频高达240MHz,集成传统蓝牙、低功耗蓝牙与2.4GHzWi-Fi。版本与接口提供30引脚与38引脚两种版本,可选配MicroUSB或Type-C接口。34~39引脚仅用于输入,内部无上拉电阻ADC12位精度;使用Wi-Fi时不能使用ADC2引脚EN键复位;BOOT键按下为下载模式36/39引脚内置霍尔传感器图5-19ESP32开发板实物标感叹号的引脚与内部闪存共享,不能作为常规GPIO使用。5.4.2ESP32引脚与ArduinoIDE安装图5-20ESP32开发板30引脚定义引脚图标注了GPIO复用功能:ADC、Touch、SPI、I2C、UART、DAC等,便于按需选用。用ArduinoIDE开发ESP32/dl/package_esp32_index.jsonhttps://espressif.github.io/arduino-esp32/package_esp32_index.json/espressif/.../package_esp32_index.json在"附加开发板管理器网址"中可添加多个索引地址,然后搜索"ESP32"并安装。ESP32库比ESP8266更大、安装更久;若中断,重复点"安装"至完成。安装完成后在"工具"中选择ESP32开发板类型与端口。5.4.2ESP32:添加开发板索引在首选项附加开发板管理器网址,添加ESP32索引图5-21添加ESP32索引文件步骤:首选项→附加开发板管理器网址→填入ESP32索引→确定。5.4.2ESP32:安装开发板库在开发板管理器中搜索esp32并安装图5-22安装ESP32库要点:ESP32与ESP8266安装方式一致,均在开发板管理器中完成。5.4.3MQTT协议简介MQTT通过发布/订阅模式实现设备间高效通信,运行MQTT的设备有三种角色发布者Publisher向MQTT代理(Broker)发送消息的客户端。代理Broker消息中转站(云服务器),接收发布者的消息并分发给订阅者。订阅者Subscriber从MQTT代理接收消息的客户端。→→角色可重叠同一设备可同时具备多种角色:既能发布消息,也能订阅其他主题,实现双向通信与远程控制。主题Topic(核心概念)标识消息类别或传输路径;发布者发布到特定主题,订阅者订阅特定主题即可接收;内容可为字符串或JSON格式。5.4.3MQTT库安装与程序框架安装PubSubClient库ArduinoIDE→库管理器→搜索"PubSubClient"→安装;需同时安装ESP8266/ESP32开发板支持。程序一般包含6个部分引入库文件:PubSubClient.h、ESP8266WiFi.h连接Wi-Fi(ssid/password)定义MQTT服务器地址与主题创建PubSubClient并连接服务器回调函数处理订阅到的消息loop中循环收发消息MQTT程序骨架(以mqtt_esp8266为例)#include<ESP8266WiFi.h>#include<PubSubClient.h>constchar*ssid="你的WiFi";constchar*password="你的密码";constchar*mqtt_server="";WiFiClientespClient;PubSubClientclient(espClient);voidsetup(){Serial.begin(115200);setup_wifi();client.setServer(mqtt_server,1883);client.setCallback(callback);reconnect();}voidloop(){if(!client.connected())reconnect();client.loop();}5.4.3MQTT库加载与安装加载PubSubClient库,安装完成即可调用MQTT接口图5-23加载库图5-24MQTT库安装完成界面要点:PubSubClient库封装了MQTT连接、发布、订阅与回调等核心功能。5.4.3MQTT项目代码示例代码包含WiFi连接、MQTT连接与发布订阅逻辑图5-25MQTT项目代码5.4.3MQTT远程控制LED(一)连接与配置全局配置+setup_wifi(mqtt_esp8266示例)#include<ESP8266WiFi.h>#include<PubSubClient.h>constchar*ssid="********";constchar*password="********";constchar*mqtt_server="";constchar*inTopic="inTopic";//订阅主题constchar*outTopic="outTopic";//发布主题#defineLED_BUILTIN2//NodeMCU板载LEDWiFiClientespClient;PubSubClientclient(espClient);longlastMsg=0;charmsg[50];intvalue=0;voidsetup_wifi(){delay(10);Serial.begin(115200);Serial.print("Connectingto");Serial.println(ssid);WiFi.begin(ssid,password);while(WiFi.status()!=WL_CONNECTED){delay(500);Serial.print(".");}Serial.println("WiFiconnected");Serial.println(WiFi.localIP());}要点服务器端口1883;订阅/发布主题可自定;LED_BUILTIN对应板载LED。板型设置:NodeMCU1.0(ESP-12E)、CPU80MHz、Flash4MB(3MSPIFFS)、Upload115200。5.4.3MQTT远程控制LED(二)回调与灯控callback回调+setup(mqtt_esp8266示例)voidcallback(char*topic,byte*payload,unsignedintlength){Serial.print("Messagearrived[");Serial.print(topic);Serial.print("]");for(inti=0;i<length;i++){Serial.print((char)payload[i]);}Serial.println();if((char)payload[0]=='1'){digitalWrite(LED_BUILTIN,LOW);//开灯}else{digitalWrite(LED_BUILTIN,HIGH);//关灯}}voidsetup(){pinMode(LED_BUILTIN,OUTPUT);Serial.begin(115200);setup_wifi();client.setServer(mqtt_server,1883);client.setCallback(callback);}回调机制订阅主题收到消息时自动触发callback;setCallback注册回调函数。消息为字符'1'时输出低电平点亮LED,其余(如'0')关灯;NodeMCU板载LED低电平点亮。5.4.3MQTT远程控制LED(三)重连与发布reconnect重连+loop周期发布(mqtt_esp8266示例)voidreconnect(){while(!client.connected()){Serial.print("AttemptingMQTTconnection...");if(client.connect("ESP8266Client")){Serial.println("connected");client.subscribe(inTopic);}else{Serial.print("failed,rc=");Serial.print(client.state());Serial.println("tryagainin5seconds");delay(5000);}}}voidloop(){if(!client.connected()){reconnect();}client.loop();longnow=millis();if(now-lastMsg>2000){lastMsg=now;++value;snprintf(msg,50,"helloworld#%ld",value);client.publish(outTopic,msg);}}重连reconnect未连接时循环尝试,clientId"ESP8266Client";成功后订阅inTopic。client.loop()维持收发;每2秒向outTopic发布"helloworld#N"。5.4.3用MQTTBox客户端验证①安装:电脑端安装MQTTBox软件,单击"CreateMQTTClient"添加客户端。②配置:填写服务器地址与端口1883;配置正确时"Not-connected"变为"Connected"。③订阅/发布:向inTopic发布'1'/'0'控制LED;订阅outTopic观察消息。④验证:串口监视器可看到outTopic发布"helloworld"与订阅结果。也可使用""、""等免费MQTT服务器测试项目;若代理要求认证,改为connect(clientId,userName,passWord)。NodeMCU板载LED订阅/发布↓↑MQTT代理(Broker)↓↑MQTTBox客户端发布inTopic'1'点亮、'0'熄灭;订阅outTopic接收"helloworld#N"。5.4.3用MQTTBox客户端验证(一)安装MQTTBox并添加MQTT客户端图5-26MQTTBox安装完成界面图5-27添加MQTTBox客户端要点:MQTTBox是跨平台MQTT测试工具,可快速连接broker并收发消息。5.4.3用MQTTBox客户端验证(二)配置连接参数并建立连接图5-28参数配置图5-29连接成功要点:客户端与设备必须连接同一MQTTBroker,并订阅/发布相同的主题。5.4.3用MQTTBox客户端验证(三)订阅与发布主题,验证远程控制图5-30订阅主题图5-31发布主题图5-32完成结果5.5Cayenne物联网平台(要点补充)说明:本教材5.5节正文缺失(docx源无内容),以下为要点补充供教学参考。平台定位Cayenne(myDevices)是面向物联网的拖拽式可视化仪表板平台;支持Arduino、树莓派、ESP8266/ESP32等硬件,云端远程查看传感器数据并控制设备。接入方式通过Cayenne-MQTT库与MQTT协议接入;在平台添加设备与通道,可自动识别传感器、创建控件,并通过Widget拖拽搭建仪表板。特点:免费额度、拖拽式面板、规则引擎触发(邮件/通知)、支持手机APP;适合课程项目快速演示。与本章对比:乐为物联偏国内平台与上传数据,Cayenne偏国外拖拽式可视化;两者均基于MQTT,核心思想一致。本章小结①物联网平台:掌握主流云平台(天工、阿里云、OneNet、QQ物联、NB-IoT)的定位与特点,理解平台价值。②乐为物联:注册建设备、添加传感器/控制器,用LeweiClient库上传LM35温度数据到云端。③开发板:认识NodeMCU(ESP8266)与ESP32开发板、引脚功能与ArduinoIDE环境搭建。④MQTT协议:理解发布者/订阅者/代理三角色与主题Topic,掌握PubSubClient库基本用法。⑤项目实战:完成MQTT远程控制LED,学会用MQTTBox客户端发布/订阅进行验证。⑥拓展:Cayenne拖拽式仪表板、MQTTBox/免费Broker,为综合项目打基础。课后思考:如何用MQTT实现双机互控?修改主题与消息格式,实现多传感器数据周期上报。第六章Arduino项目实战智能洒水系统·WS2812艺术灯·巴法云MQTT远程控制《Arduino应用技术(第二版)》·NodeMCU·ESP32·MQTT·巴法云·Wokwi高职电子信息类专业教学用本章学习目标●了解基于NodeMCU的洒水系统制作方法;●掌握基于ESP32的艺术灯控制实现过程。本章依托ESP系列开发板与MQTT协议,构建两个物联网项目项目一·智能洒水系统NodeMCU开发板连接电磁阀,MQTT实现数据收发;通过网络浏览器或移动APP远程开/关电磁阀,并实时监控阀门状态。项目二·艺术灯控制系统ESP32驱动WS2812彩色灯带,接入巴法云MQTT;通过移动APP或电脑客户端远程切换纯白、彩虹、随机等灯光效果。本章内容地图6.1基于NodeMCU的洒水系统6.1.1硬件连接6.1.2软件安装与程序编写6.1.3系统调试与运行效果系统构成:NodeMCU+继电器+电磁阀+双LED指示+12V电源;通过MQTT远程控制电磁阀开/关,实时查询状态。6.2基于ESP32的艺术灯控制6.2.1WS2812灯带简介6.2.2硬件连接6.2.3巴法云平台的使用6.2.4MQTTX客户端连接巴法云6.2.5移动客户端连接巴法云6.2.6ESP32程序编写6.2.7系统调试与运行效果系统构成:ESP32+WS2812灯带(16灯珠)+巴法云MQTT;APP/电脑客户端切换纯白、彩虹、随机、熄灭四种效果。6.1基于NodeMCU的洒水系统概述NodeMCU开发板与螺线管(电磁阀)相连,MQTT协议负责数据收发;用户可通过网络浏览器或移动APP远程操控电磁阀并监控状态。远程开/关浏览器或APP发送控制信号状态监控互联网实时监控电磁阀状态MQTT通信数据发送与接收的通道系统硬件组成●NodeMCU:主控,接入WiFi与MQTT●继电器:以小控大,驱动电磁阀●电磁阀:控制水路开/关●双LED:指示WiFi与MQTT连接状态●12VDC适配器:为继电器与电磁阀供电●面包板/软管接头:接线与水路连接6.1.1硬件连接表6-1所需硬件序号型号数量1NodeMCU12继电器13电磁阀14LED(红色)25200Ω电阻2612VDC适配器17MicroUSB线18面包板19软管接头2图6-1硬件连接示意图NodeMCU数字引脚控制继电器,继电器驱动12V电磁阀;两个LED经200Ω限流电阻接GPIO,指示状态。6.1.1引脚定义与实物D2→继电器S端:控制继电器开关,进而控制电磁阀。D3→继电器S端读数据:读取继电器当前通断状态。D4→WiFi_LED:指示WiFi连接状态(点亮=已连接)。D5→MQTT_LED:指示MQTT服务器连接状态(点亮=已连接)。通过D3读继电器状态,可向云端查询电磁阀当前是"浇水中"还是"已关闭"。图6-2洒水系统实物图6.1.2软件安装与程序配置所需软件ArduinoIDE(1.6.4+)、ESP8266扩展包、串口驱动、MQTT客户端(MQTTBox)、PubSubClient库。安装步骤:①安装IDE与ESP8266扩展包;②安装PubSubClient库(若IDE已含可跳过);③下载并上传程序;④选择板型与端口上传。constchar*ssid="你的WiFi名称";constchar*password="你的WiFi密码";StringclientId="你的用户名";char*mqtt_topic="你的主题";mqtt_topic与clientId应尽量唯一,否则他人可能控制你的设备需要认证时改为connect(clientId,userName,passWord)服务器默认,可换broker.emqx.io等免费服务器6.1.2主程序(一)引脚定义与WiFi连接全局配置+setup_wifi#include<ESP8266WiFi.h>#include<PubSubClient.h>#defineRELAY_PIND2//D2继电器S端#defineINPUT_PIND3//D3读继电器状态#defineWIFI_LEDD4//D4WiFi指示灯#defineMQTT_LEDD5//D5MQTT指示灯constchar*ssid="你的WiFi热点名称";constchar*password="你的WiFi密码";StringclientId="your_unique_clientid";char*mqtt_topic="your_unique_topic";constchar*mqtt_server="";WiFiClientespClient;PubSubClientclient(espClient);longlastMsg=0;charmsg[50];intvalue=0;voidsetup_wifi(){delay(100);digitalWrite(WIFI_LED,LOW);//关闭WiFi灯Serial.print("Connectingto");Serial.println(ssid);WiFi.begin(ssid,password);while(WiFi.status()!=WL_CONNECTED){delay(500);Serial.print(".");}Serial.println("WiFiconnected");digitalWrite(WIFI_LED,HIGH);//WiFi连上打开WiFi灯Serial.println(WiFi.localIP());}引脚定义D2控制继电器、D3读状态;D4/D5为WiFi与MQTT状态灯。WiFi连上后点亮WiFi_LED;mqtt_server可换用broker.emqx.io等。6.1.2主程序(二)回调控制继电器callback回调:接收MQTT消息控制电磁阀voidcallback(char*topic,byte*payload,unsignedintlength){Serial.print("CommandfromMQTTbrokeris:[");Serial.print(topic);charp=(char)payload[0];if(p=='0'){//0关闭阀门digitalWrite(RELAY_PIN,LOW);Serial.println("TurnOffSolenoid!");}if(p=='1'){//1打开阀门digitalWrite(RELAY_PIN,HIGH);Serial.println("TurnOnSolenoid!");}if(p=='Q'||p=='q'){//查询阀门状态value=digitalRead(INPUT_PIN);if(value==1){client.publish(mqtt_topic,"hoseiswatering");}else{client.publish(mqtt_topic,"hoseisshutoff");}}Serial.println();}收到'0'关闭电磁阀,收到'1'打开电磁阀。收到'q'/'Q'时读取INPUT_PIN,向主题回发"hoseiswatering"或"hoseisshutoff"。6.1.2主程序(三)重连、初始化与主循环reconnect+setup+loopvoidreconnect(){while(!client.connected()){digitalWrite(MQTT_LED,LOW);//关闭MQTT灯if(client.connect(clientId.c_str())){digitalWrite(MQTT_LED,HIGH);//连上MQTT打开灯Serial.println("connected");client.subscribe(mqtt_topic);}else{Serial.print("failed,rc=");Serial.println(client.state());delay(6000);//6秒后重试}}}voidsetup(){Serial.begin(115200);setup_wifi();client.setServer(mqtt_server,1883);client.setCallback(callback);pinMode(RELAY_PIN,OUTPUT);pinMode(WIFI_LED,OUTPUT);pinMode(MQTT_LED,OUTPUT);pinMode(INPUT_PIN,INPUT);}voidloop(){if(!client.connected()){reconnect();}client.loop();}断线时循环重连,连上后订阅主题并点亮MQTT_LED。setup配置引脚与MQTT;loop中维持连接并调用client.loop()保持消息收发。6.1.3系统调试与运行效果WiFi指示:D4点亮=已连接WiFi;若熄灭,核对代码中的热点名称与密码。MQTT指示:D5点亮=已连接MQTT服务器;若熄灭,检查服务器主机配置。三类控制消息:●'1'→打开电磁阀●'0'→关闭电磁阀●'q'→查询状态,回发"hoseiswatering"或"hoseisshutoff"图6-3串口监视器运行结果程序上传成功、网络正常时:串口输出"WiFiconnected"、IP地址与"MQTTconnection...connected"。利用MQTTBox向主题发送上述消息即可远程控制阀门。6.2基于ESP32的艺术灯控制概述利用ESP32开发板、MQTT协议与巴法云物联网平台,实现对艺术灯的控制;用户可通过移动APP、电脑客户端或巴法云平台远程操控彩色灯带。多端控制移动APP/电脑客户端/平台四档效果纯白/彩虹/随机/熄灭巴法云平台创建主题、发布消息、查看内容系统硬件组成●ESP32:主控,接入WiFi与巴法云MQTT●WS2812灯带:单线控制的全彩可寻址LED●巴法云(Bemfa):免费物联网云平台,MQTT服务器:9501●控制端:MQTTX电脑客户端、IoTMQTTPanel移动APP、Wokwi在线仿真6.2.1WS2812灯带简介WS2812是基于WS2812芯片控制的数字可控LED灯带,集控制信号与电源传输于一体,可实现多种动态灯光效果。VDD电源正极(接5V)GND电源地线DIN数据输入(接控制器)DOUT数据输出(级联下一颗)单线控制协议:信号经DIN依次传递给每个灯珠,以PWM控制亮度与颜色,实现全彩RGB显示;灯带可剪切、拼接,灯珠较多时需单独供电以防电压降。图6-4WS2812灯带工作电压通常为5V,单颗灯珠为内置IC的可寻址RGBLED。6.2.2硬件连接信号引脚:使用ESP32的引脚4连接灯带DIN,电源接5V。级联:DOUT用于灯带级联;仅用单条灯带时无需连接DOUT。供电:灯珠数量较多时建议外接电源,保证充足供电。可结合Wokwi在线仿真平台调试:内置ESP32与16灯珠环形WS2812灯带。图6-5仿真环境硬件连接6.2.2硬件连接(实物场景)实物场景下的灯带接线与系统组成图6-6实物场景硬件连接WS2812灯带硬件连接非常简便,通常只需连接电源正负极与信号引脚即可。DOUT引脚用于灯带的级联;若仅使用单个灯带,无需连接DOUT。灯珠数量较多时建议外接电源,保证充足供电。可结合Wokwi在线仿真平台调试:内置ESP32与16灯珠环形WS2812灯带。6.2.3巴法云平台:注册、登录与切换注册账号、登录控制台并切换到MQTT协议图6-7注册巴法云图6-8登录巴法云图6-9切换到MQTT协议步骤:注册(邮箱)→账号登录→控制台点击"MQTT设备云"切换MQTT协议。巴法云(BemfaCloud)是专注物联网设备接入的一站式云平台,支持MQTT/TCP,个人开发者免费使用,官网。6.2.3巴法云平台的使用①注册与登录:打开官网,建议邮箱注册;注册完成后账号登录。②切换MQTT:控制台点击"MQTT设备云",在输入框新建主题(如LED)。③查看私钥:左上角用户框的"私钥"即编程时的客户端ID(ClientID),点击"眼睛"图标查看并记录。图6-10新建主题图6-11查看主题图6-12查看私钥6.2.4MQTTX:下载与配置下载安装MQTTX并设置中文界面、开启新建连接图6-14设置MQTTX中文界面图6-15开启新建连接图6-13MQTTX下载6.2.4MQTTX电脑客户端调试下载:MQTTX是桌面端全功能MQTT客户端工具,官网mqttx.app/zh免费下载。新建连接:连接名称MQTT_Test;主机地址,端口9501;MQTT版本选择3.1(巴法云仅支持3.1);用户名密码可不填。测试:连接成功后订阅主题LED,发布on/off消息,观察设备响应;可在巴法云平台查看消息推送与同步状态。图6-16配置新建连接图6-17发布/订阅消息6.2.4MQTTX:巴法云平台监控在巴法云平台查看订阅在线情况与主题消息状态图6-18巴法云平台显示要点:巴法云平台可实时显示主题的订阅者在线状态与消息推送记录,用于监控设备通信。6.2.5手机客户端(IoTMQTTPanel)配置①下载与语言:下载IoTMQTTPanel,在设置中切换为简体中文。②新建连接:主机、端口9501,客户端ID填巴法云私钥,连接成功后添加仪表板LED_Control。③添加面板:开关面板(面板名Switch、主题LED、开on关off);文本输入面板("灯带效果");LED指示灯面板。图6-20设置连接图6-21添加开关面板6.2.5手机客户端:切换界面语言将IoTMQTTPanel界面语言设置为简体中文切换语言(一)切换语言(二)切换语言(三)6.2.5手机客户端:文本输入面板与消息推送添加文本输入面板,并通过巴法云推送消息测试同步图6-22添加文本输入面板图6-23MQTT消息推送与同步6.2.5手机客户端控制验证开关控制:点击手机上的开关面板,向主题LED发送on/off,灯带随之点亮/熄灭,状态实时同步。文本控制:在"灯带效果"输入rainbow切换彩虹效果,输入random随机变色,输入off熄灭灯带。巴法云平台与手机客户端订阅同一主题,任意一端发布消息,另一端实时同步,状态保持一致。图6-23消息推送与状态同步图6-24文本输入控制6.2.6ESP32程序(一)全局配置头文件与全局配置#include<WiFi.h>#include<PubSubClient.h>#include<Adafruit_NeoPixel.h>//替换为你的网络信息constchar*ssid="Wokwi-GUEST";constchar*password="";//巴法云MQTT服务器信息constchar*mqttServer="";constintmqttPort=9501;constchar*mqttUser="";//用户名,非必要constchar*mqttClientId="6f2e7b28...";//私钥constchar*topic="LED";//订阅主题//WS2812灯带配置#defineLED_PIN4//灯带连接的引脚#defineLED_COUNT16//灯珠数量Adafruit_NeoPixelstrip(LED_COUNT,LED_PIN,NEO_GRB+NEO_KHZ800);WiFiClientespClient;PubSubClientclient(espClient);boolrandomMode=false;//随机模式标志程序功能:接入WiFi、接入MQTT、四种灯带效果、断线自动重连。编写方法:自顶向下设计(整体到局部分解子任务)、自底向上实现(先写基础函数再组装)。6.2.6ESP32程序(二)自动重连reconnectWiFi+reconnect:断线自动重连boolreconnectWiFi(){Serial.println("WiFiconnectionlost...");WiFi.reconnect();unsignedlongstartAttemptTime=millis();while(WiFi.status()!=WL_CONNECTED&&(millis()-startAttemptTime)<10000){delay(500);//10秒超时Serial.print(".");}if(WiFi.status()==WL_CONNECTED){Serial.println("WiFireconnected");returntrue;}else{Serial.println("WiFireconnectionfailed");returnfalse;}}voidreconnect(){while(!client.connected()){if(client.connect(mqttClientId,mqttUser,"")){Serial.println("connected");client.subscribe(topic);//重新订阅主题}else{Serial.print("failed,rc=");Serial.println(client.state());delay(5000);//5秒后重试}}}WiFi重连超时10秒,失败返回false。MQTT连接失败每5秒重试,连接成功后重新订阅主题。6.2.6ESP32程序(三)效果函数setAllWhite+rainbow+turnOffvoidsetAllWhite(){//灯带全亮白色for(inti=0;i<strip.numPixels();i++){strip.setPixelColor(i,strip.Color(255,255,255));}strip.show();}voidrainbow(){//灯带彩虹渐变for(longfirstPixelHue=0;firstPixelHue<5*65536;firstPixelHue+=256){for(inti=0;i<strip.numPixels();i++){intpixelHue=firstPixelHue+(i*65536L/strip.numPixels());strip.setPixelColor(i,strip.gamma32(strip.ColorHSV(pixelHue)));}strip.show();delay(10);}}voidturnOff(){//灯带全灭strip.clear();strip.show();}纯白:所有灯珠设为RGB(255,255,255)。彩虹:ColorHSV生成色相循环+gamma32亮度
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医师测评练习题及答案分享
- VTE培训考核试题及答案一览
- 痫病知识测试题及答案
- 测绘法模拟试题及最终答案揭晓
- 门卫安全模拟试题及答案大全
- 安徽教师遴选全真模拟试题及答案
- 2026年秦川机床工具集团招聘试题及答案
- 2026四川省考评员培训考试题库及答案
- 2026营销岗位大练兵题库及答案
- 2026年安徽合肥安全员模拟考试卷
- GB/T 31880-2026检验检测机构诚信基本要求
- 2026秋新教材人教版五年级上册数学《观察简单组合体》教学设计(3课时)
- 1.4 人口普查 课件(共25张) 北师大版数学四年级上册
- 妊娠期妇女心肺复苏急救指南(2025版)中文版+围产期急救操作规范
- 精益基础考试题及答案
- 2026年四川省成都市中考语文真题(试题+答案)
- 2025中国联通广东省分公司校园招聘(174个岗位)笔试历年参考题库附带答案详解
- 2026年国家电网职称考试(工业工程技术-营销工程)(副高)经典试题及答案
- 2026科特迪瓦能源行业的现状贸易分析及投资策略配置布局研究方案
- 2026年幼儿园教职工安全
- 饲料原料采购管理制度
评论
0/150
提交评论