完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、前言
本文主要探讨的是怎样快速实现基于物联网威廉希尔官方网站 的共享停车位的联网方案分析。想要能够快速搭建其方案原型,可选择采用shineblink.com推出的Core开发板,该开发板作为专用的物联网开发板,其编程简单且功能强大。 PS:Core 仅用五、六行代码即可实现Wifi/Ble/NB/Lora/ThreadMesh/RFID/Eth/U***/RS485/RS232通信、以及30多种传感器/10多种硬件外设/10多种Mcu内设功能,并且这些功能最多可以 5 种随机组合同时运行。更多关于Core的内容可以在 shineblink.com 上了解。 二、共享车位方案设计思路 此方案采用mesh无线组网威廉希尔官方网站 ,Lora无线远距离强穿透威廉希尔官方网站 ,NBIOT无线远程通信威廉希尔官方网站 ,下面解释为什么会用这三种无线威廉希尔官方网站 。 Mesh网络:每个车位采用Mesh节点组网的方式。因为Mesh节点有成本低,数量大的优点。 Lora星型网络:Lora负责把各个Mesh网络串联起来,因为Lora通信距离很远,且穿墙性能优越。适合地下多层停车场的通信布局。 NBIOT通信:NBIOT通信模块负责和远程的云端通信。一般整个停车场用一到2个即可。 三、具体程序 一、Mesh组网代码 --PanID和Channel决定了mesh网络的唯一性 PanID = 0x1234 --16位整型 Channel = 11 --选择范围(11~26) MyRole = "Client" --一个mesh网络里可以有多个client角色 LIB_MeshConfig(MyRole,PanID,Channel) --启动并加入mesh网络 --client自身的名字"CONTROL0"和server端所提及到的client名字要一致 ClientName = "CONTROL0" --ClientName是Client在网络中被Server所识别的唯一身份ID LIB_GpioOutputConfig("D8","STANDARD") --LED1 LIB_GpioOutputConfig("D9","STANDARD") --LED2 LIB_GpioWrite("D8",1) --灭 LIB_GpioWrite("D9",1) --灭 --设置按键1(占用D0口,低电平有效) LIB_ButtonConfig("BTN1","D10","L") net_state = 0 --开始大循环 while(GC(1) == true) do --网络状态led指示 net_state = LIB_MeshClientNetStateQuery() if net_state == 2 then --client已加入mesh网且找到了server LIB_GpioWrite("D9",0) --LED2亮 else LIB_GpioWrite("D9",1) --LED2灭 end --如果BTN1按键短按且client已经加入mesh网并找到了server,就向Server上传数据 key = LIB_ButtonQuery("BTN1") if key == 1 and net_state == 2 then data = {0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00} LIB_MeshClientSendData(ClientName,data) end --查询是否收到来自server下发的8字节命令,并解析 recv_flag, cmd = LIB_MeshClientRecvCommand() if recv_flag == 1 and #cmd == 8 then if cmd[1] == 0x10 then --这里只解析server下发的命令的第一个字节 LIB_GpioToggle("D8") --LED1亮或灭切换 end end end 二、Lora代码 --本机地址(范围:0-65535),其他Lora节点如果需要发送消息给本机必须知道该地址 addr = 100 --通信信道(范围:410-441MHz),相互通信的Lora节点必须在同一信道 channel = 433 --无线速率(范围:0.3, 1.2, 4.8, 9.6, 19.2kpbs),速率越低通信质量越高 baudrate = "9.6kpbs" --发射功率(范围:11, 14, 17, 20dB),该值越大通信质量越高,但功耗会增加 tx_pwr = "20dB" --设置Lora模块占用TX0、RX0、Aux接D5引脚,Md0接D6引脚 --Lora通信参数:地址=100,通信信道=433M,无线速率=9.6kbps,发射功率=20dBm LIB_LoraConfig("UART0","D5","D6",addr,channel,baudrate,tx_pwr) --开始大循环 while(GC(1) == true) do --查询是否收到数据,如果收到就应答 recv_flag,recv_addr,recv_data = LIB_LoraRecv() if recv_flag == 1 then --将收到的数据全部加1作为应答返回给发送者 for i = 1, #recv_data, 1 do recv_data = recv_data + 1 end LIB_LoraSend(recv_addr, recv_data) end end 三、NBIOT连接云端代码 --MQTT服务器地址(适用于ONE NET平台) server_addr = "183.230.40.96" --中移物联网MQTT接入服务ip地址 server_port = 1883 --MQTT 连接参数(适用于ONE NET平台) mqtt_con_clientID = "TestDevice001" mqtt_con_username = "353255" mqtt_con_password = "version=2018-10-31&res=products%2F353255%2Fdevices%2FTestDevice001&et=1893427200&method=md5&sign=%2F5RJwGwytPWvVDB04K7rnw%3D%3D" --MQTT topic相关参数(适用于ONE NET平台) mqtt_sub_topic = "$sys/353255/TestDevice001/cmd/request/+"--订阅用 mqtt_pub_topic = "$sys/353255/TestDevice001/dp/post/json" --发布用 --设置m5311 NB模块占用TX0、RX0、D5、D6引脚,MQTT模式 --KeepAlive周期180秒 LIB_NbMqttM5311Config("UART0","D5","HIGH","D6","HIGH",server_addr,server_port,mqtt_con_clientID,mqtt_con_username,mqtt_con_password,180,mqtt_sub_topic,"QOS0") --配置D9为普通输出,控制LED2 LIB_GpioOutputConfig("D9","STANDARD") --使能系统10毫秒定时器开始工作 LIB_10msTimerConfig("ENABLE") --设置sht3x传感器占用SCL0和SDA0引脚,以每秒出10个数据的频率工作,"HIGH"表示最高精度 LIB_Sht3xConfig("IIC0","10","HIGH") --变量初始化 cnt_10ms = 0 cnt1_10ms = 0 pub_id = 0 temprature = 0.00 humidity = 0.00 --定义10ms中断回调函数 function LIB_10msTimerCallback() cnt_10ms = cnt_10ms + 1 cnt1_10ms = cnt1_10ms + 1 end --开始大循环 while(GC(1) == true) do sht3x_flag,temp,humi = LIB_Sht3xGetResult() --如果传感器有新的温湿度数据产生 if sht3x_flag == 1 then temprature = temp humidity = humi end --查询是否收到服务器下发的cmd数据(已订阅的"$sys/353255/TestDevice001/cmd/request/+") recv_flag,topic,data = LIB_NbMqttM5311RecvSub() if recv_flag == 1 then --根据json路径"$.LED"解析服务器下发的json文本,并执行LED亮灭操作 Json_Val = LIB_JsonParse(data, "$.LED") --服务器下发的是"{"LED":0}" if Json_Val == "0" then LIB_GpioWrite("D9",1) --LED2灭 --服务器下发的是"{"LED":1}" elseif Json_Val == "1" then LIB_GpioWrite("D9",0) --LED2亮 --服务器下发的是"{"LED":2}" elseif Json_Val == "2" then LIB_GpioToggle("D9") --LED2亮灭切换 else LIB_GpioWrite("D9",1) --LED2灭 end --根据收到的topic中的cmdid应答服务器, --将收到的topic中"request"替换成"response"后作为应答topic发给服务器 topic = string.gsub(topic,"request","response") --应答内容可自定义,这里为"Got it!" LIB_NbMqttM5311SendPub("QOS0", topic, "Got it!") end --每5秒发送温湿度度数据给server if cnt_10ms >= 500 then cnt_10ms = 0 pub_id = pub_id + 1 json_str = string.format("{"id":%d, "dp":{"temperatrue":[{"v": %.2f,}], "humidity":[{"v":%.2f,}]}}", pub_id, temprature, humidity) --注意json_str的总长度不要超过150字节 LIB_NbMqttM5311SendPub("QOS0", mqtt_pub_topic, json_str) --publish end --每12秒打印一次NBIOT模组信息(包含sim卡) --注意:这里只是为了演示如何获取模组信息,实际应用中您可以根据您的需求查询即可,不需要一直查询 if cnt1_10ms >= 1200 then --12000ms cnt1_10ms = 0 State,IMEI,IMSI,ICCID,RSSI = LIB_NbStatusQuery() print(string.format("module state: %s", State)) print(string.format("module IMEI: %s", IMEI)) print(string.format("module IMSI: %s", IMSI)) print(string.format("module ICCID: %s", ICCID)) print(string.format("module RSSI: %d dBM", RSSI)) end end **以上程序为官网部分例程,需要进行相应的改动。 四、结语 通过ShineBllink Core物联网开发板,可以快速搭建相应的物联网共享停车位解决方案,此方案能够轻松解决,在一些地下停车场等信号不好的情况。 |
|
|
|
只有小组成员才能发言,加入小组>>
3314 浏览 9 评论
2995 浏览 16 评论
3494 浏览 1 评论
9059 浏览 16 评论
4088 浏览 18 评论
1180浏览 3评论
605浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
599浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2335浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1896浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 18:08 , Processed in 1.368707 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号