第七章 利用腾讯云和Arduino搭建物联网系统_第1页
第七章 利用腾讯云和Arduino搭建物联网系统_第2页
第七章 利用腾讯云和Arduino搭建物联网系统_第3页
第七章 利用腾讯云和Arduino搭建物联网系统_第4页
第七章 利用腾讯云和Arduino搭建物联网系统_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第07章利用腾讯云和Arduino开源硬件搭建物联网系统从软件模拟到真实硬件为什么从模拟器转向真实硬件?回顾与反思前几章我们使用MQTT.fx/MQTTX等软件模拟器,这非常适合在早期快速建立认知,理解MQTT协议的工作原理以及设备与云端通信的基本逻辑。真实世界的需求真正的物联网系统不能仅存在于电脑屏幕上,它必须与物理环境交互:通过传感器感知并采集温度、光照等真实环境数据,通过执行器对物理世界产生实际影响。本章学习目标使用ArduinoD1UNOR3(内置Wi-Fi)连接腾讯云IoTExplorer,配合微信小程序实现:

1.遥测(Telemetry):传感器→云端→小程序展示

2.遥控(RemoteControl):小程序→云端→控制执行器实验内容概览•布尔数(Boolean):模拟按键输入与LED输出,掌握开关量控制逻辑。

•浮点数(Float):模拟电压采集与PWM输出,掌握模拟量的处理。

•真实传感器:以DS18B20温度传感器为例,实现真实数据采集与上报。7.1实验1.1布尔数正向传送(遥测)——硬件接线开发板:ArduinoD1UNOR3基于ESP8266Wi-Fi芯片,集成无线通信功能,非常适合物联网(IoT)原型开发。电路连接:开关信号输入•D12数字引脚连接物理开关一端。

•开关另一端接3.3V电源。

•D12引脚通过10kΩ电阻下拉至GND(地)。工作原理:电平转换•断开:下拉电阻使引脚接地→逻辑低电平(0)

•闭合:引脚直接接电源→逻辑高电平(1)

将物理状态转化为Arduino可识别的数字信号。供电与程序下载使用USB-C数据线连接开发板与电脑:

1.为整个电路提供稳定的5V工作电源。

2.作为串行通信接口,用于将代码下载至板载闪存中运行。7.1实验1.1腾讯云平台配置(回顾第3章)IoTExplorer平台概览腾讯云物联网开发平台提供了完整的设备接入、管理、数据分析及应用开发能力,支持海量设备快速连接云端,是我们实验的核心基座。物模型(ThingModel)定义设备具备的属性、服务及事件的抽象模型。它是设备与云端数据交互的“统一语言”,将物理设备数字化,实现跨厂商设备的互联互通。01.创建设备在腾讯云物联网平台上,按引导完成产品的创建及具体设备的注册流程。02.定义物模型添加属性:“开关”(标识符:switch),类型为布尔型,读写权限设置为“只读”。03.获取通信凭证复制设备证书中的MQTT服务器地址、端口、ClientID、UserName和Password。04.确定通信Topic上报属性Topic:

$thing/up/property/{PID}/{DName}05.配置微信小程序面板使用“腾讯连连”小程序,扫描设备二维码完成绑定,在自定义面板中添加“开关”控件并与物模型中的`switch`属性关联,完成可视化配置。7.1实验1.1代码结构与关键函数01/核心库引入•ESP8266WiFi.h:控制Wi-Fi连接与通信•PubSubClient.h:提供MQTT客户端功能•ArduinoJson.h:处理JSON数据序列化与解析02/Setup()函数:初始化(运行一次)1.初始化串口波特率与GPIO引脚输入/输出模式2.连接指定SSID和密码的Wi-Fi网络3.配置MQTT服务器地址、端口,并建立连接03/Loop()函数:主循环(持续执行)•持续检查MQTT连接状态,掉线时自动重连•读取物理开关的高低电平信号(digitalRead)•调用publishMsg()发布数据,随后延时1秒04/关键函数:publishMsg()•使用StaticJsonDocument构建JSON对象,封装上报数据•格式示例:{"method":"report","params":{"switch":1}}•通过MQTTclient.publish()将JSON字符串发送至云端7.1实验1.1实验现象程序烧录将编写好的代码上传到Arduino开发板,完成固件更新。设备上线检查指示灯状态,确保开发板成功连接Wi-Fi与MQTT服务器。小程序绑定打开微信“腾讯连连”小程序,扫描设备二维码,快速添加并完成绑定。观察现象•小程序面板中出现开关控件,状态实时显示。•拨动连接在开发板上的物理开关。•小程序开关状态会毫秒级同步变化。云端验证登录腾讯云物联网平台控制台,进入设备详情页。在“日志”或“属性上报记录”中,可清晰查看到设备实时上报的`switch`状态变化。7.1实验1.2布尔数反向控制(遥控)——硬件与配置🔌硬件连接:控制LED•D4数字引脚通过220Ω限流电阻接LED阳极。•LED阴极直接连接开发板的GND(接地)。☁️云端配置变更•新增属性:“开关控制”(标识符:light)•数据类型:布尔型(Boolean)•读写类型:读写(Read-Write),开启云端下发指令权限。📡通信主题(Topic)设备需订阅如下Topic以接收云端下发的属性指令:$thing/down/property/{ProductID}/{DeviceName}💻代码逻辑变更增加回调函数(CallbackFunction),用于异步处理设备接收到的云端属性设置指令,并根据指令的布尔值状态(True/False)控制LED的亮灭。7.1实验1.2代码关键点:订阅消息的处理设置回调函数在Arduino代码的setup()初始化阶段,必须调用:client.setCallback(callback);这行代码用于告诉MQTT客户端:当收到订阅主题的消息时,去执行哪个函数进行处理。保持MQTT循环在loop()主循环体中,必须持续调用:client.loop();它的作用就像一个“信使”:•维持与服务器的心跳连接

•实时检查并接收下发的消息回调函数逻辑1.接收消息:从参数中获取payload,通常为JSON格式字符串。2.解析指令:使用deserializeJson提取params.light的值(0或1)。3.控制硬件:根据解析结果,调用digitalWrite(LED_PIN,...)点亮或熄灭LED。程序逻辑转变与“主动上报数据”不同,订阅模式下,程序在loop()中处于“待命”状态。它不再主动执行逻辑,而是等待云端下发指令,通过回调函数异步响应,实现云端对设备的反向控制。7.1实验1.3布尔数双向(遥测+遥控)🎯实验目标整合实验1.1(遥测)与1.2(遥控)功能,打通设备与云端的双向数据链路,实现物联网闭环控制。🔧硬件配置同时连接两个关键外设:数字开关(GPIOD12,作为输入源)和LED灯(GPIOD4,作为执行器)。☁️云端属性定义1.`switch`(只读):用于设备主动上报开关状态

2.`light`(读写):用于云端下发指令,控制LED亮灭💻代码整合保留`loop()`上报逻辑+订阅回调监听逻辑,合并运行。⚡工作原理发布(PUB)与订阅(SUB)使用独立Topic,功能互不干扰。📱交互体验:实现真正的“闭环”在小程序端,你可以直观地看到开关状态的实时变化,同时也可以通过界面上的按钮随时下发指令控制LED。这正是物联网“感知”与“控制”相结合的典型场景。7.2实验2.1浮点数正向传送(电压遥测)——硬件🎯实验目标通过模拟输入读取电位器的分压值,并将数据上报到物联网云端,实现电压的远程遥测与监控。🔌硬件连接•电位器两端引脚:分别连接开发板的3.3V电源和GND地。

•电位器中间抽头:连接开发板的A0引脚(模拟信号输入端)。⚡工作原理•利用A0引脚内置的10位ADC,将0~3.3V的模拟电压量化为0~1023的整数值。

•旋转电位器旋钮改变分压比,从而改变A0的输入电压,获得不同ADC读数。☁️云端配置•属性名:电压(标识符:upVoltage)

•配置:数据类型设为浮点型(float),读写权限设为只读。7.2实验2.1代码要点:模拟量读取与JSON组装读取模拟值使用analogRead(A0)函数获取传感器信号,返回范围为0~1023的整数值,对应输入电压0~3.3V。转换为电压值将ADC读数转换为物理电压,公式如下:

floatvoltage=sensorValue*(3.3/1023.0);

计算后获得实际伏特(V)值。组装JSON数据引入ArduinoJson库,构建上报数据结构,将计算出的voltage值填入params.upVoltage字段中,以符合云端接收规范。发布与循环上报调用client.publish()方法将JSON数据发送至云端。在loop()函数末尾添加delay(1000)实现每隔1秒的周期性数据上报。7.2实验2.2浮点数反向控制(遥控)——硬件实验目标接收云端下发的浮点型电压值,并在硬件电路上进行解码与转换,最终产生并输出对应的模拟电压。硬件限制与方案•限制:ArduinoD1UNO无DAC,无法直接输出模拟电压。

•方案:利用PWM(脉宽调制)技术模拟。

•连接:使用D4引脚(支持PWM)外接RC低通滤波器。云端配置•属性名:电压设置(Identifier:downVoltage)

•数据类型:浮点型(float)

•读写权限:可读写(Read&Write)核心代码逻辑1.在回调函数中解析云端下发的downVoltage。

2.将浮点电压值映射转换为0-255的PWM占空比数值。

3.调用analogWrite(pin,value)输出PWM信号。7.2实验2.3浮点数双向通信实验目标整合前两个实验的功能模块,打通数据流,实现模拟量的双向闭环通信。硬件配置在一块开发板上完成连接:

•输入端:连接电位器到模拟引脚A0

•输出端:连接RC滤波电路到数字引脚D4云端配置定义两个浮点型(Number)属性:

•upVoltage(只读):上报采集电压

•downVoltage(读写):下发目标电压代码整合逻辑•上行逻辑:在主循环`loop()`中,定期读取A0引脚电压,并通过`upVoltage`属性上报。

•下行逻辑:在`downVoltage`属性的回调函数中,接收云端下发值,转换为PWM占空比并输出到D4。闭环验证与分析在手机小程序或Web控制台,手动设置一个目标电压值,下发给设备。

观察设备采集并上报的实际电压值,对比两者差异,直观分析PWM模拟电压的线性度与精度误差。7.3实验3DS18B20温度传感器遥测▍传感器介绍DS18B20是常用的单总线(OneWire)数字温度传感器。特点:

•仅需一根数据线即可通信

•支持多点组网,可并联多个

•抗干扰能力强,适合工业环境▍硬件连接&库连接引脚:

•VCC→3.3V电源

•GND→接地

•DQ(数据线)→D4(需接4.7kΩ上拉电阻)核心依赖库:

•OneWire.h:处理单总线通信协议

•DallasTemperature.h:DS18B20专用驱动▍关键代码逻辑1.声明对象:定义引脚与传感器实例

2.初始化:sensors.begin()

3.请求转换:sensors.requestTemperatures()

4.读取数据:sensors.getTempCByIndex(0)▍云端平台配置•功能名称:环境温度监测

•物模型属性:

-标识符:temp

-数据类型:浮点型(Float)

-访问权限:只读(Read-Only)7.3DS18B20实验代码关键点引入库并声明对象#include<OneWire.h>

#include<DallasTemperature.h>

#defineONE_WIRE_BUSD4

OneWireoneWire(ONE_WIRE_BUS);DallasTemperaturesensors(&oneWire);初始化传感器(Setup)在初始化函数中调用,完成传感器启动:sensors.begin();读取温度(Loop循环)1.sensors.requestTemperatures();//触发温度测量指令

2.floattemp=sensors.getTempCByIndex(0);//获取索引0设备的摄氏温度值数据组装与发布将获取到的temp变量数值,填充到上报设备属性的JSON数据结构中,调用相应接口即可完成云端上报。三个实验对比总结布尔数实验数据类型

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论