做网站要分几部分完成广东网站建设方便

news/2025/10/8 14:58:50/文章来源:
做网站要分几部分完成,广东网站建设方便,在线做头像网站,西安电商网站开发一、项目介绍 在游乐场、商场、景区等人流量较大的地方#xff0c;往往存在用户需要临时存放物品的情况#xff0c;例如行李箱、外套、购物袋等。为了满足用户的储物需求#xff0c;并提供更加便捷的服务体验#xff0c;当前设计了一款物联网智能储物柜。 该智能储物柜通…一、项目介绍 在游乐场、商场、景区等人流量较大的地方往往存在用户需要临时存放物品的情况例如行李箱、外套、购物袋等。为了满足用户的储物需求并提供更加便捷的服务体验当前设计了一款物联网智能储物柜。 该智能储物柜通过与华为云物联网服务器的连接实现了数据的传输和管理让用户可以通过微信小程序轻松查看储物柜的可用状态和选择合适的储物柜进行解锁。通过使用4G联网模块E29 Cat-1储物柜实现了稳定的网络连接确保了用户可以随时随地查看和使用储物柜。 主控芯片采用STC12C5A60S2具有低功耗、高性能和丰富的外设接口等特点能够满足储物柜的控制需求。而储物柜的锁则采用了电磁锁能够快速、安全地实现储物柜的解锁和上锁操作。 用户在解锁储物柜后会扣除相应的押金预付金然后根据使用时间进行计费。用户可以随时存取自己的物品并且在使用完成后可以通过微信小程序完成订单结算使整个使用过程更加便捷和透明。 这款4G智能储物柜为用户提供了一种灵活、安全、便捷的储物解决方案能够有效满足人们日常生活中的储物需求并提供良好的用户体验。 智能储物柜支持的主要功能 1远程查看储物柜状态用户可以通过微信小程序实时查看储物柜的可用状态包括储物柜数量、剩余可用储物柜数量等信息。这使得用户在选择储物柜时可以提前了解储物柜的可用性避免不必要的等待。 2指定储物柜解锁用户可以在微信小程序上选择需要使用的储物柜并进行解锁操作。当用户选择指定储物柜后储物柜会自动解锁方便用户存放物品。 3押金扣除和计费在解锁储物柜时系统会自动扣除用户的押金预付金。智能储物柜根据使用时间进行计费用户只需根据实际使用时间支付相应费用。 4存取物品一旦用户成功解锁储物柜他们就可以将物品存放或取出。用户可以随时存取自己的物品并享受到安全可靠的储物体验。 5临时解锁功能如果用户需要频繁存取物品储物柜提供了临时解锁功能。用户可以选择设置一段时间内的临时解锁无需重复进行解锁操作方便快捷。 6订单结算用户在使用完成后可以通过微信小程序完成订单结算。系统会根据实际使用时间和费率进行计算并生成相应的费用清单供用户支付。 整体系统流程框架图 做好的柜子效果如下 柜子不带屏幕的全部操作在微信小程序上进行 二、软硬件选型 2.1 硬件选型 智能储物柜所需的硬件主要包括下面几个部分 1主控芯片采用STC12C5A60S2主控芯片具有低功耗、高性能和丰富的外设接口能够满足储物柜的控制需求。 24G联网模块采用华为云IOT提供的4G联网模块E29 Cat-1确保储物柜具备稳定的网络连接功能实现远程数据传输和管理。 3电磁锁(每个小柜子一个电磁锁)储物柜采用电磁锁作为解锁和上锁的装置能够快速、安全地实现储物柜的开关操作。电磁锁具有较高的稳定性和安全性。 4电源系统储物柜需要一个可靠的电源系统来供电以确保储物柜的正常运行。 5外壳和结构组件储物柜外壳。 采用主控板 采用的电磁锁 采用的柜子 2.2 软件选型 软件包含了4个部分。 1设备端的程序开发智能储物柜设备端的程序。 2华为云IOT物联网服务器的配置。设备注册、消息转发。 3智能锁的后台云服务器搭建。 4小程序、公众号程序开发。 三、华为云物联网服务器部署 3.2 开通物联网服务 地址 https://www.huaweicloud.com/product/iothub.html 点击总览查看接入信息。 我们当前设备准备采用MQTT协议接入华为云平台这里可以看到MQTT协议的地址和端口号等信息。 总结: 端口号 MQTT (1883) 接入地址 e244e6efb9.st1.iotda-device.cn-north-4.myhuaweicloud.com根据域名地址得到IP地址信息: Microsoft Windows [版本 10.0.19045.3448] (c) Microsoft Corporation。保留所有权利。C:\Users\11266ping e244e6efb9.st1.iotda-device.cn-north-4.myhuaweicloud.com正在 Ping e244e6efb9.st1.iotda-device.cn-north-4.myhuaweicloud.com [117.78.5.125] 具有 32 字节的数据: 来自 117.78.5.125 的回复: 字节32 时间41ms TTL94 来自 117.78.5.125 的回复: 字节32 时间44ms TTL94 来自 117.78.5.125 的回复: 字节32 时间43ms TTL94 来自 117.78.5.125 的回复: 字节32 时间42ms TTL94117.78.5.125 的 Ping 统计信息:数据包: 已发送 4已接收 4丢失 0 (0% 丢失) 往返行程的估计时间(以毫秒为单位):最短 41ms最长 44ms平均 42msC:\Users\11266MQTT协议接入端口号有两个1883是非加密端口8883是证书加密端口单片机无法加载证书所以使用1883端口比较合适。 接下来的ESP8266就采用1883端口连接华为云物联网平台。 3.3 创建产品 1创建产品 点击产品页再点击创建产品。 2填写产品信息 根据自己产品名字填写。 3产品创建成功 4添加自定义模型 产品创建完成之后点击进入产品详情页面翻到最下面可以看到模型定义。 这个模型就是定义自己设备接下来需要向服务器上传那些数据类型。根据自己的数据类型进行编写。 先点击自定义模型。 再创建一个服务ID。 接着点击新增属性。 设置属性。 属性添加成功。 3.4 添加设备 产品是属于上层的抽象模型接下来在产品模型下添加实际的设备。添加的设备最终需要与真实的设备关联在一起完成数据交互。 1注册设备 2根据自己的设备填写 设备标识码、密码这些根据自己情况认真填写。 3保存设备信息 创建完毕之后点击保存并关闭得到创建的设备密匙信息。该信息在后续生成MQTT三元组的时候需要使用。 创建之后得到的设备信息如下 {device_id: 65113d05a559fd7cd41435f8_lock1,secret: 12345678 }4设备创建完成 可以点击设备进入到设备详情页面。 3.5 MQTT协议主题订阅与发布 1主题订阅格式 帮助文档地址https://support.huaweicloud.com/devg-iothub/iot_02_2200.html 对于设备而言一般会订阅平台下发消息给设备 这个主题。 设备想接收平台下发的消息就需要订阅平台下发消息给设备 的主题订阅后平台下发消息给设备设备就会收到消息。 如果设备想要知道平台下发的消息需要订阅上面图片里标注的主题。 以当前设备为例最终订阅主题的格式如下: $oc/devices/{device_id}/sys/messages/down最终的格式: $oc/devices/65113d05a559fd7cd41435f8_lock1/sys/messages/down​ 2主题发布格式 对于设备来说主题发布表示向云平台上传数据将最新的传感器数据设备状态上传到云平台。 这个操作称为属性上报。 帮助文档地址https://support.huaweicloud.com/api-iothub/iot_06_v5_3010.html 根据帮助文档的介绍 当前设备发布主题上报属性的格式总结如下 发布的主题格式: $oc/devices/{device_id}/sys/properties/report最终的格式: $oc/devices/65113d05a559fd7cd41435f8_lock1/sys/properties/report 发布主题时需要上传数据这个数据格式是JSON格式。上传的JSON数据格式如下:{services: [{service_id: 填服务ID,properties: {填属性名称1: 填属性值,填属性名称2: 填属性值,..........}}] } 根据JSON格式一次可以上传多个属性字段。 这个JSON格式里的服务ID属性字段名称属性值类型在前面创建产品的时候就已经介绍了不记得可以翻到前面去查看。根据这个格式组合一次上传的属性数据: {services: [{service_id: lock,properties:{lock:1}}]}3.6 MQTT三元组 MQTT协议登录需要填用户ID设备ID设备密码等信息就像我们平时登录QQ微信一样要输入账号密码才能登录。MQTT协议登录的这3个参数一般称为MQTT三元组。 接下来介绍华为云平台的MQTT三元组参数如何得到。 1MQTT服务器地址 要登录MQTT服务器首先记得先知道服务器的地址是多少端口是多少。 帮助文档地址https://console.huaweicloud.com/iotdm/?regioncn-north-4#/dm-portal/home MQTT协议的端口支持1883和8883它们的区别是8883 是加密端口更加安全。但是单片机上使用比较困难所以当前的设备是采用1883端口进连接的。 根据上面的域名和端口号得到下面的IP地址和端口号信息 如果设备支持填写域名可以直接填域名不支持就直接填写IP地址。 IP地址就是域名解析得到的 华为云的MQTT服务器地址117.78.5.125 域名e244e6efb9.st1.iotda-device.cn-north-4.myhuaweicloud.com 华为云的MQTT端口号1883注意 具体要看这里 2生成MQTT三元组 华为云提供了一个在线工具用来生成MQTT鉴权三元组 https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/ 打开这个工具填入设备的信息也就是刚才创建完设备之后保存的信息点击生成就可以得到MQTT的登录信息了。 下面是打开的页面 填入设备的信息 上面两行就是设备创建完成之后保存得到的 得到三元组之后设备端通过MQTT协议登录鉴权的时候填入参数即可。 ClientId 65113d05a559fd7cd41435f8_lock1_0_0_2023092508 Username 65113d05a559fd7cd41435f8_lock1 Password 1a3e7f486aa551bca7b6ff5c19c29d2006e940ec1f98ab416e10be12881069533.7 模拟设备登录测试 经过上面的步骤介绍已经创建了产品设备数据模型得到MQTT登录信息。 接下来就用MQTT客户端软件模拟真实的设备来登录平台。测试与服务器通信是否正常。 1填入登录信息 打开MQTT客户端软件对号填入相关信息就是上面的文本介绍。然后点击登录订阅主题发布主题。 2打开网页查看 完成上面的操作之后打开华为云网页后台可以看到设备已经在线了。 点击详情页面可以看到上传的数据。 到此云平台的部署已经完成设备已经可以正常上传数据了。 3.8 添加控制命令(云端控制设备) 在产品页面添加控制命令。 根据自己设备的情况填写需要发送的控制命令。 3.9 云端发送控制命令 在设备页面测试刚才添加的命令。 点击确定之后在MQTT客户端上就能收到云端下发的控制命令。 说明当前的MQTT客户端实际就是模拟的真实设备。 真实设备收到控制命令就可以判断完成锁的开关控制。 这个下发的命令是有反馈。设备端收到之后可以向服务器反馈状态这样服务器才能知道刚才的控制命令确实发送成功了。 设备收到信息之后上传回应给服务器的主题和内容格式 Topic$oc/devices/{device_id}/sys/commands/response/request_id{request_id} 数据格式 {result_code: 0,response_name: COMMAND_RESPONSE,paras: {result: success} }云端发送控制命令之后设备收到的消息如下 $oc/devices/65113d05a559fd7cd41435f8_lock1/sys/commands/request_idd49f0bb9-ba87-4c9b-b915-98a1f0fcf689{paras:{lock:true},service_id:lock,command_name:锁开关控制}其中request_idd49f0bb9-ba87-4c9b-b915-98a1f0fcf689 就是本次的请求ID。回应的时候需要加上请求ID。服务器才好对应。 以当前设备为例 发布的主题这样填 $oc/devices/65113d05a559fd7cd41435f8_lock1/sys/commands/response/request_idce49181e-7636-4b24-946d-c034ca083c1c发布的内容这样填 {result_code:0,response_name:COMMAND_RESPONSE,paras:{result:success}}在MQTT软件里这样填 MQTT回应之后可以在云端的发送命令界面看到右上角有弹窗提示命令下发成功。 四、微信小程序开发 如果要开发自己的上位机远程控制设备。 一般有两种需求。 1获取设备的状态。 2给设备发送控制指令。 那么下面就介绍这两种接口如何使用就是标准的HTTPS接口。 4.1 获取设备影子数据API接口 帮助文档https://support.huaweicloud.com/api-iothub/iot_06_v5_0079.html 设备影子介绍 设备影子是一个用于存储和检索设备当前状态信息的JSON文档。 每个设备有且只有一个设备影子由设备ID唯一标识 设备影子仅保存最近一次设备的上报数据和预期数据 无论该设备是否在线都可以通过该影子获取和设置设备的属性简单来说设备影子就是保存设备最新上传的一次数据。 我们设计的软件里如果想要获取设备的最新状态信息就采用设备影子接口。 如果对接口不熟悉可以先进行在线调试https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?productIoTDAapiShowDeviceShadow 在线调试接口可以请求影子接口了解请求与返回的数据格式。 (调试的时候可以选择只填必填项) 设备影子接口返回的数据如下 {device_id: 65113d05a559fd7cd41435f8_lock1,shadow: [{service_id: lock,desired: {properties: null,event_time: null},reported: {properties: {lock: 1},event_time: 20230925T081357Z},version: 0}] }4.2 控制命令发送(API接口) 帮助文档https://support.huaweicloud.com/api-iothub/iot_06_v5_0038.html 在线调试地址https://console.huaweicloud.com/apiexplorer/#/openapi/IoTDA/debug?apiCreateCommand 填写需要发送给设备的消息。 {lock:1}设备端可以收到下发的命令 设备端收到下发命令之后也可以向服务器反馈状态反馈的方式在前面的3.9小节已经介绍过了。 4.3 创建IAM账户 创建一个IAM账户因为接下来开发上位机需要使用云平台的API接口这些接口都需要token进行鉴权。简单来说就是身份的认证。 调用接口获取Token时就需要填写IAM账号信息。所以接下来演示一下过程。 地址: https://console.huaweicloud.com/iam/?regioncn-north-4#/iam/users 获取Token时除了AIM账号外还需要项目凭证: 9254586ba43841e6bf4995dc24023d6b鼠标点击自己昵称点击统一身份认证。 点击左上角创建用户。 创建成功 用户创建成功。 4.4 TOKEN动态获取 调用服务器的API接口都需要填写token下面介绍如何通过账号信息动态获取token正常的token时效性是24小时。 帮助文档https://support.huaweicloud.com/api-iam/iam_30_0001.html#section4 请求地址: POST https://iam.服务ID.myhuaweicloud.com/v3/auth/tokens请求参数 {auth: {identity: {methods: [password],password: {user: {domain: {name: IAMDomain //IAM用户所属帐号名华为云的主账号},name: IAMUser, //IAM用户名刚才创建的password: IAMPassword //IAM用户密码刚才创建的}}},scope: {project: {name: cn-north-1 //服务ID创建产品时创建的}}} }Qt编写的示例代码 /* 功能: 获取token */ void Widget::GetToken() {QString requestUrl;QNetworkRequest request;//设置请求地址QUrl url;//获取token请求地址requestUrl QString(https://iam.%1.myhuaweicloud.com/v3/auth/tokens).arg(SERVER_ID);//自己创建的TCP服务器,测试用//requestUrlhttp://10.0.0.6:8080;//设置数据提交格式request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant(application/json;charsetUTF-8));//构造请求url.setUrl(requestUrl);request.setUrl(url);QString text QString({\auth\:{\identity\:{\methods\:[\password\],\password\:{\user\:{\domain\: {\name\:\%1\},\name\: \%2\,\password\: \%3\}}},\scope\:{\project\:{\name\:\%4\}}}}).arg(MAIN_USER).arg(IAM_USER).arg(IAM_PASSWORD).arg(SERVER_ID);//发送请求manager-post(request, text.toUtf8()); }4.5 规则转发 为了能让自己的私有服务器收到设备的状态变化可以在华为云物联网服务器上创建转发规则。 1创建规则 填充规则转发的信息 参数名参数说明规则名称自定义如: led_obs。规则描述自定义如数据转发至OBS服务。数据来源选择“设备属性”。触发事件自动匹配“设备属性上报”。资源空间和上一步创建的产品所在的资源空间保持一致。 2创建属性设备上报消息时触动转发规则 3添加转发规则 可以根据自己的需求设置目的地址。 如果自己有私有服务器创建转发规则即可。 五、硬件端代码开发 5.1 E29 Cat-1模块 全网通E29 Cat-1 支持多种协议基于4G网络具有速度快延迟低等特点Cat-1相比于4G有具有更低的功耗。全网通E29Cat-1模块的特点 1.TAS-E29 Cat-1全网通芯片 2.4G全网通Cat-1芯片 3.支持TCP/UDP/MQTT/HTTP等多种协议 4.基于4G网络网络速度快 5.功耗比4G芯片低40% 6.支持标准AT指令、短信透传 7.中英文短信透传/配置 8.支持LBS基站定位 9.modbus轮询技术、自定义心跳包、注册包。5.2 4G模块与MQTT服务器交互常用的AT指令 AT检查模块是否正常工作并响应AT指令。ATCGATT激活或取消激活GPRS附着。在使用EC20模块进行网络通信之前需要先激活GPRS附着。ATCIPSHUT关闭移动场景TCP/IP连接。使用该指令可以关闭之前建立的TCP连接。ATCIPSTART建立TCP或UDP连接到远程服务器。对于MQTT协议首先需要使用ATCIPSTART建立到MQTT服务器的TCP连接。ATCIPSEND发送数据到TCP或UDP连接。对于MQTT协议您可以使用该指令发送MQTT数据包例如订阅主题、发布消息等。ATCIPCLOSE关闭TCP或UDP连接。ATCMQTTUSR设置MQTT连接的用户名。ATCMQTTPASS设置MQTT连接的密码。ATCMQTTACCQ设置MQTT连接的客户端ID。ATCMQTTCONN连接到MQTT服务器。在设置好MQTT连接参数后使用该指令进行连接。ATCMQTTPUB发布MQTT消息。使用该指令发布消息到指定的主题。ATCMQTTSUB订阅MQTT主题。使用该指令订阅感兴趣的主题当有消息发布到该主题时EC20模块会收到相应的回调。ATCMQTTUNS取消订阅MQTT主题。使用该指令取消已经订阅的主题。5.3 MQTT连接主要代码 核心代码模板 // 引入必要的库 #include reg51.h #include string.h// 定义串口通信相关的寄存器地址 #define UART_BAUD_RATE_H 0xFD // 波特率高位 #define UART_BAUD_RATE_L 0xFE // 波特率低位 #define UART_CONTROL_REG 0x98 // 控制寄存器地址// 定义MQTT服务器信息 #define MQTT_SERVER mqtt.example.com // MQTT服务器地址 #define MQTT_PORT 1883 // MQTT端口号// 定义设备ID和认证信息 #define DEVICE_ID your_device_id // 设备ID #define USERNAME your_username // 用户名 #define PASSWORD your_password // 密码// 定义订阅和发布的主题 #define SUBSCRIBE_TOPIC your_subscribe_topic // 订阅主题 #define PUBLISH_TOPIC your_publish_topic // 发布主题// 定义MQTT协议相关指令 #define CONNECT_CMD ATCMQTTCONN\ MQTT_SERVER \,\ MQTT_PORT \,\ DEVICE_ID \,\ USERNAME \,\ PASSWORD \\r\n // 连接指令 #define SUBSCRIBE_CMD ATCMQTTSUB\ SUBSCRIBE_TOPIC \,1\r\n // 订阅指令 #define PUBLISH_CMD ATCMQTTPUB\ PUBLISH_TOPIC \,0,0,0,\your_message\\r\n // 发布指令// 定义串口发送函数 void UART_SendString(char *str) {while (*str) {SBUF *str;while (!TI);TI 0;str;} }// 主函数 void main() {// 配置串口通信波特率为9600bpsPCON 0x00;TMOD 0x20;TH1 UART_BAUD_RATE_H;TL1 UART_BAUD_RATE_L;TR1 1;SCON UART_CONTROL_REG;// 连接MQTT服务器UART_SendString(CONNECT_CMD);// 等待连接成功的回复// 编写等待回复的代码// 订阅主题UART_SendString(SUBSCRIBE_CMD);// 等待订阅成功的回复// 编写等待回复的代码// 设备登录成功进入循环while (1) {// 定时上报数据可以根据需求设置时间间隔// 这里使用延时函数模拟时间间隔delay(5000); // 上报数据到指定主题UART_SendString(PUBLISH_CMD);// 等待上报完成的回复// 编写等待回复的代码} } 4.4 锁控制代码 // 引入必要的库 #include reg51.h #include string.h// 定义串口通信相关的寄存器地址 #define UART_BAUD_RATE_H 0xFD // 波特率高位 #define UART_BAUD_RATE_L 0xFE // 波特率低位 #define UART_CONTROL_REG 0x98 // 控制寄存器地址// 定义MQTT服务器信息 #define MQTT_SERVER mqtt.example.com // MQTT服务器地址 #define MQTT_PORT 1883 // MQTT端口号// 定义设备ID和认证信息 #define DEVICE_ID your_device_id // 设备ID #define USERNAME your_username // 用户名 #define PASSWORD your_password // 密码// 定义订阅主题 #define SUBSCRIBE_TOPIC your_subscribe_topic // 订阅主题// 定义电磁锁的IO口连接图纸 #define LOCK_1 P2_0 // 电磁锁1的控制IO口 #define LOCK_2 P2_1 // 电磁锁2的控制IO口 #define LOCK_3 P2_2 // 电磁锁3的控制IO口 #define LOCK_4 P2_3 // 电磁锁4的控制IO口 #define LOCK_5 P2_4 // 电磁锁5的控制IO口 #define LOCK_6 P2_5 // 电磁锁6的控制IO口 #define LOCK_7 P2_6 // 电磁锁7的控制IO口 #define LOCK_8 P2_7 // 电磁锁8的控制IO口 #define LOCK_9 P3_0 // 电磁锁9的控制IO口 #define LOCK_10 P3_1 // 电磁锁10的控制IO口 #define LOCK_11 P3_2 // 电磁锁11的控制IO口 #define LOCK_12 P3_3 // 电磁锁12的控制IO口// 定义MQTT协议相关指令 #define CONNECT_CMD ATCMQTTCONN\ MQTT_SERVER \,\ MQTT_PORT \,\ DEVICE_ID \,\ USERNAME \,\ PASSWORD \\r\n // 连接指令 #define SUBSCRIBE_CMD ATCMQTTSUB\ SUBSCRIBE_TOPIC \,1\r\n // 订阅指令// 定义串口发送函数 void UART_SendString(char *str) {while (*str) {SBUF *str;while (!TI);TI 0;str;} }// 电磁锁控制函数 void controlLock(int lockNumber, int lockState) {switch (lockNumber) {case 3:// 控制电磁锁3if (lockState 1) {// 打开电磁锁LOCK_3 1;} else {// 关闭电磁锁LOCK_3 0;}break;case 4:// 控制电磁锁4if (lockState 1) {// 打开电磁锁LOCK_4 1;} else {// 关闭电磁锁LOCK_4 0;}break;case 5:// 控制电磁锁5if (lockState 1) {// 打开电磁锁LOCK_5 1;} else {// 关闭电磁锁LOCK_5 0;}break;case 6:// 控制电磁锁6if (lockState 1) {// 打开电磁锁LOCK_6 1;} else {// 关闭电磁锁LOCK_6 0;}break;case 7:// 控制电磁锁7if (lockState 1) {// 打开电磁锁LOCK_7 1;} else {// 关闭电磁锁LOCK_7 0;}break;case 8:// 控制电磁锁8if (lockState 1) {// 打开电磁锁LOCK_8 1;} else {// 关闭电磁锁LOCK_8 0;}break;case 9:// 控制电磁锁9if (lockState 1) {// 打开电磁锁LOCK_9 1;} else {// 关闭电磁锁LOCK_9 0;}break;case 10:// 控制电磁锁10if (lockState 1) {// 打开电磁锁LOCK_10 1;} else {// 关闭电磁锁LOCK_10 0;}break;case 11:// 控制电磁锁11if (lockState 1) {// 打开电磁锁LOCK_11 1;} else {// 关闭电磁锁LOCK_11 0;}break;case 12:// 控制电磁锁12if (lockState 1) {// 打开电磁锁LOCK_12 1;} else {// 关闭电磁锁LOCK_12 0;}break;default:// 锁编号无效break; }}// 主函数 void main() {// 配置串口通信波特率为9600bpsPCON 0x00;TMOD 0x20;TH1 UART_BAUD_RATE_H;TL1 UART_BAUD_RATE_L;TR1 1;SCON UART_CONTROL_REG;// 连接MQTT服务器UART_SendString(CONNECT_CMD);// 等待连接成功的回复// 编写等待回复的代码// 订阅主题UART_SendString(SUBSCRIBE_CMD);// 等待订阅成功的回复// 编写等待回复的代码// 设备登录成功进入循环while (1) {// 接收到MQTT消息后解析并控制对应的电磁锁// 编写接收和解析MQTT消息的代码// 设备接收到的消息格式为 LOCK_X_ON 或 LOCK_X_OFF其中 X 为电磁锁编号// 解析消息并提取电磁锁编号和状态int lockNumber; // 电磁锁编号int lockState; // 电磁锁状态0表示关闭1表示打开if (strncmp(receivedMessage, LOCK_, 5) 0) {lockNumber receivedMessage[5] - 0; // 提取锁编号if (strstr(receivedMessage, ON) ! NULL) {lockState 1; // 提取锁状态ON表示打开} else if (strstr(receivedMessage, OFF) ! NULL) {lockState 0; // 提取锁状态OFF表示关闭}// 控制对应的电磁锁controlLock(lockNumber, lockState);}} } 六、总结 这款基于单片机设计的智能储物柜是一种应用于游乐场、商场和景区等场所的便捷储物解决方案。用户可以通过微信小程序实时查看储物柜的可用状态并选择指定柜子进行解锁。 该智能储物柜支持4G联网采用主控芯片STC12C5A60S2和4G联网模块E29 Cat-1来实现与网络的连接。用户在解锁储物柜时需要支付押金预付金随后系统开始计时并按照使用的时间进行收费。储物柜也支持临时解锁和存取物品功能。用户完成使用后可以通过微信小程序完成订单结算。 储物柜的锁采用电磁锁技术通过控制相应的IO口来实现开锁或关锁。整体而言该智能储物柜以单片机为核心集成了4G通信模块、电磁锁和华为云物联网服务器等技术提供方便、安全的储物服务。每个储物柜都是一个独立的设备通过华为云物联网服务器实现数据传输和管理。 基于单片机设计的智能储物柜在不同场所为用户提供便捷的储物解决方案通过技术的融合和应用提升用户体验和管理效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/931627.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年微信小程序开发:趋势、最佳实践与AI整合 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网站点击率怎么建西安做公司网站

STM32G4系列单片机,为32位的微控制器,理论上其内部寄存器地址最多支持4GB的命名及查找(2的32次方,地址命名为0x00000000至0xFFFFFFFF)。STM32官方对4GB的地址存储进行编号时,又分割成了8个block区域&#x…

网站有哪几种类型做网站 华普花园

会计学专业学什么 会计学专业属于工商管理学科下的一个二级学科,本专业培养具备财务、管理、经济、法律等方面的知识和能力,具有分析和解决财务、金融问题的基本能力,能在企、事业单位及政府部门从事会计实务以及教学、科研方面工作的工商管…

实验课1

实验1源代码1 #include<stdio.h> 2 int main() 3 { 4 printf(" o\n"); 5 printf("<H>\n"); 6 printf("I I\n"); 7 8 return 0; 9 } View Code运行…

做自我介绍的网站的图片素材怎么用动图做网站背景

Description Input 第一行为两个整数n, m。第二行有n个整数&#xff0c;为a1&#xff0c;a2, …, an。 Output 包含n行&#xff0c;每行m个1~nm的正整数&#xff0c;各不相同&#xff0c;以空格分开。如果有多解&#xff0c;输出任意一组解&#xff1b;如果无解&#xff0c;输出…

深入解析:【LeetCode 热题100】回溯:括号生成 组合总和(力扣22 / 39 )(Go语言版)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

完整教程:基于 COM 的 XML 解析技术(MSXML) 的总结

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

asp网站开发需要什么网站建设 企业文化

来源&#xff1a;ScienceAI编辑&#xff1a;萝卜皮人类的大部分细胞中&#xff0c;每时每刻都在进行着各种复杂的转录过程&#xff1b;这一过程与后续的蛋白质合成息息相关&#xff0c;从而会影响人体中各类酶、抗体、激素、免疫因子等生物分子的产生&#xff0c;最终影响人的身…

详细介绍:Windows如何定制键盘按键

详细介绍:Windows如何定制键盘按键pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

台州网站建设系统江苏网站建设电话

要搭建一个标准的测量系统,需要考虑以下几个方面: 确定测量目的和需求:首先需要明确测量的目的和需求,例如测量长度、重量、体积等。同时需要考虑测量的精度和误差范围,以及测量系统的适用范围和条件等。选择合适的传感器:根据测量目的和需求,选择合适的传感器类型,例如…

TheHackersLabs Templo writeup

信息收集 nmap获取userFlag 去web看一下web上只有一个默认的index.html,通过gobuster扫一下目录 gobuster dir -u http://192.168.43.208/ -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt 有一个w…

卖花网站模板太原网站优化培训

1.rpm文件: 1.1安装rpm文件: rpm -ivh kde-select.rpm23 #--nodeps强制安装,无视环境缺少依赖的检查 rpm -ivh --nodeps kde-select.rpm #--force --replacefiles可以无视rpm的冲突去强制替换(如两个rpm的安装路径相同了会有冲突) rpm -ivh --nodeps --force --replacef…

深入解析:Oracle、PostgreSQL 与 MySQL 数据库对比分析与实践指南

深入解析:Oracle、PostgreSQL 与 MySQL 数据库对比分析与实践指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

PCIe扫盲——链路初始化与训练基础(三)之LTSSM

这一篇文章来简单地介绍一下链路训练状态机(Link Training and Status State Machine,LTSSM),并简要地介绍各个状态的作用和实现机制。 LTSSM有11个状态(其中又有多个子状态),分别是Detect、Polling、Configura…

嘉兴哪里可以做淘宝网站wordpress jquery异步请求

题目&#xff1a;洛谷P1850、UOJ#262、BZOJ4720、Vijos P2005。 题目大意&#xff1a;有n个时间段&#xff0c;第i个时间段只能在教室$c_i$上课&#xff0c;另一个上这门课的教室在$d_i$。现在你最多可以进行m次申请&#xff0c;对于第i个时间段的申请如果成功&#xff0c;那么…

#attrs

在 Vue 中,$attrs是一个核心的实例属性,用于处理 ​​父组件传递给子组件的非 Prop 属性​​。以下是其核心特性、使用场景及版本差异的详细解析: 一、核心概念​​定义​​ $attrs是一个对象,包含父组件传递给子组…

国庆比赛总结

没有摘要一些写在总结之前的话 感觉国庆这一段时间,真的是,疯狂挂分,每天感觉都在被完虐。然后也发现了很多不足吧,就是感觉自己其实大多数地方还是有很大问题的。 比赛 10/02 挂分最狠的一集 10/03 不会T2 10/04 …

记录第一个博客

工作几年了,才开始写博客,希望以后越来越好

PCIe扫盲——链路初始化与训练基础(二)

前面的文章中提到过,Ordered Sets分别有以下几种:TS1 and TS2 Ordered Set (TS1OS/TS2OS)、Electrical Idle Ordered Set (EIOS)、FTS Ordered Set (FTSOS)、SKP Ordered Set (SOS)和Electrical Idle Exit Ordered S…