失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 使用mesh Lora NB通讯方式快速搭建共享停车位物联网解决方案

使用mesh Lora NB通讯方式快速搭建共享停车位物联网解决方案

时间:2024-02-03 23:37:10

相关推荐

使用mesh Lora NB通讯方式快速搭建共享停车位物联网解决方案

一、前言

本文主要探讨的是怎样快速实现基于物联网技术的共享停车位的联网方案分析。

想要能够快速搭建其方案原型,可选择采用推出的Core开发板,该开发板作为专用的物联网开发板,其编程简单且功能强大。

PS:Core 仅用五、六行代码即可实现Wifi/Ble/NB/Lora/ThreadMesh/RFID/Eth/Usb/RS485/RS232通信、以及30多种传感器/10多种硬件外设/10多种Mcu内设功能,并且这些功能最多可以 5 种随机组合同时运行。更多关于Core的内容可以在 上了解。

二、共享车位方案设计思路

此方案采用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所识别的唯一身份IDLIB_GpioOutputConfig("D8","STANDARD") --LED1LIB_GpioOutputConfig("D9","STANDARD") --LED2LIB_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网且找到了serverLIB_GpioWrite("D9",0) --LED2亮elseLIB_GpioWrite("D9",1) --LED2灭end--如果BTN1按键短按且client已经加入mesh网并找到了server,就向Server上传数据key = LIB_ButtonQuery("BTN1")if key == 1 and net_state == 2 thendata = {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 thenif cmd[1] == 0x10 then --这里只解析server下发的命令的第一个字节LIB_GpioToggle("D8") --LED1亮或灭切换endendend

二、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,发射功率=20dBmLIB_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[i] = recv_data[i] + 1endLIB_LoraSend(recv_addr, recv_data)endend

三、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=-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为普通输出,控制LED2LIB_GpioOutputConfig("D9","STANDARD")--使能系统10毫秒定时器开始工作LIB_10msTimerConfig("ENABLE")--设置sht3x传感器占用SCL0和SDA0引脚,以每秒出10个数据的频率工作,"HIGH"表示最高精度LIB_Sht3xConfig("IIC0","10","HIGH")​--变量初始化cnt_10ms = 0cnt1_10ms = 0pub_id = 0temprature = 0.00humidity = 0.00​--定义10ms中断回调函数function LIB_10msTimerCallback()cnt_10ms = cnt_10ms + 1cnt1_10ms = cnt1_10ms + 1end​--开始大循环while(GC(1) == true)dosht3x_flag,temp,humi = LIB_Sht3xGetResult()--如果传感器有新的温湿度数据产生if sht3x_flag == 1 thentemprature = temphumidity = humiend​--查询是否收到服务器下发的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" thenLIB_GpioWrite("D9",1) --LED2灭--服务器下发的是"{"LED":1}"elseif Json_Val == "1" thenLIB_GpioWrite("D9",0) --LED2亮--服务器下发的是"{"LED":2}"elseif Json_Val == "2" thenLIB_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秒发送温湿度度数据给serverif cnt_10ms >= 500 thencnt_10ms = 0pub_id = pub_id + 1json_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) --publishend--每12秒打印一次NBIOT模组信息(包含sim卡)--注意:这里只是为了演示如何获取模组信息,实际应用中您可以根据您的需求查询即可,不需要一直查询if cnt1_10ms >= 1200 then --12000mscnt1_10ms = 0State,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))endend

**以上程序为官网部分例程,需要进行相应的改动。

四、结语

通过ShineBllink Core物联网开发板,可以快速搭建相应的物联网共享停车位解决方案,此方案能够轻松解决,在一些地下停车场等信号不好的情况。

如果觉得《使用mesh Lora NB通讯方式快速搭建共享停车位物联网解决方案》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。