版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章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亮度校正,逐帧刷新。熄灭:strip.clear()清空所有灯珠。6.2.6ESP32程序(四)随机色与消息回调randomColors+callback:随机变色与MQTT消息处理voidrandomColors(Adafruit_NeoPixel&strip){for(inti=0;i<LED_COUNT;i++){if(random(2)==0){uint32_tcolor=strip.Color(random(256),random(256),random(256));strip.setPixelColor(i,color);}else{strip.setPixelColor(i,0);//熄灭该灯珠}}strip.show();}voidcallback(char*topic,byte*payload,unsignedintlength){Stringmessage="";for(inti=0;i<length;i++){message+=(char)payload[i];}randomMode=false;//收到消息先停随机if(message=="on"){setAllWhite();}elseif(message=="rainbow"){rainbow();}elseif(message=="random"){randomMode=true;}elseif(message=="off"){turnOff();}}随机色:每个灯珠以50%概率随机三通道颜色或熄灭。收到消息:on纯白、rainbow彩虹、random进入随机、off熄灭。6.2.6ESP32程序(五)初始化与主循环setup+loopvoidsetup(){Serial.begin(115200);strip.begin();strip.setBrightness(200);//亮度0-255strip.show();WiFi.begin(ssid,password);while(WiFi.status()!=WL_CONNECTED){delay(500);Serial.print(".");}Serial.println
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第1课 中华文明的起源与早期国家 授课课件(共24张)
- 2026年天峻县网格员招聘笔试备考题库及答案解析
- 2026年宜丰县网格员招聘考试备考题库及答案解析
- 2026广东梅州市梅江区气象局招聘见习人员1人笔试备考试题及答案详解
- 2026年泗洪县中小学幼儿园教师招聘考试参考题库及答案解析
- 2026年古典诗词鉴赏模拟试卷
- 2026哈尔滨银行成都分行社会招聘考试备考题库及答案详解
- 2026江苏连云港海州区区域性农技服务中心聘用农业技术人才2人笔试参考题库及答案详解
- 2026年玉溪市公安局第二批次招聘警务辅助人员(42人)笔试参考题库及答案详解
- 2026重庆数字资源集团所属数据运营分公司招聘16人笔试模拟试题及答案详解
- 2026年射频消融术试题及答案
- 2026年云南中考(语文)考试试卷真题带答案
- FDE模式行业观察与实践
- 2026年浙江(中考)英语考试题库(含答案)
- HL1ST601-2023 钢结构焊接连接节点通 用图B册 (Q355钢)
- APQC跨行业流程分类框架 (8.0 版)( 中文版-2026年4月)
- 2025年劳动人事争议仲裁员培训考试试题及答案
- 膀胱阴道瘘修补术后护理查房
- 初中信息技术-初识Python教学课件设计
- 工程伦理第2章工程中的风险、安全与责任
- JJG 949-2011经纬仪检定装置
评论
0/150
提交评论