联通雁飞格物云平台,单片机连接MQTT服务器

最近疫情解封了,好多人都发烧请病假,单位也放假了,我到一直没事儿,在家空闲时间很多,自己做了一个4G边缘网关连接云平台,折腾了半个月,连接联通的燕飞格物云平台成功,现将过程和一些注意事项分享给大家,国内云服务商很多,阿里,腾讯,移动,联通都有,之所以选联通是因为联通的平台免费,当然 ONENET也免费,但根据我实际使用下来感觉ONENET不太稳定,技术支持也不到位,而且如果展示数据用VIEW也要付费,联通的平台数据有记录和曲线显示,适合入门,最关键免费,所以作为入门首先,

我的4G网关是用单片机做的,下面就说一下单片机怎么整,在此选用国产STC 的单片机,1是便宜,2是串口多,我选的STC15W4K56S4,有4个串口,速度最高115200,完全能满足要求,下面是硬件设计,有两个485串口,3路DI输入,都能计数,两路ADC输入,板载继电器(10A250V)

模组电源AC220v,用的金升阳AC/DC品质可靠,也可以之流5V供电,在野外调试设备如果没有电,可以弄个手机充电宝供电,先调试起来。到达现场立马就可以投运。

4G模组用的有人7S1 ,

WIFI模组用的成都亿百特,

RS485模组用周立功的,致远电子

硬件设计使用的PROTEL99SE,设计电路和PCB

单片机开发用KEIL4,完成单片机开发调试 ,使用C语言

MQTT调试用MQTTX调试工具,比以前我用的MQTTFX好用的多,而且支持中文

报文捕获用Wireshark,大家用的时候端口过滤一下1883,就可以了

报文整理用Notepad3搞定,因为Wireshark抓的包,单片机C语言不能直接处理

哈希256加密软件网上很多,找一个在线的就可以,联通的设备接入必须要解决哈西256加密算法

4G模组参数设定, 7S1模组设置软件用USR-TCP232,需设定波特率,运营商 GPS ,NTP

WIFI模组设定用E103-W01,设置WIFI模组的 ID,IP,PORT,Password,

逻辑分析软件用Saleae Logic,调试报文的时候用逻辑分析仪扑获硬件串口数据

地图定位用7S1模组自带的 LBS基站定位参数,基站地位精度差,不过室内可以用 ,GPS只能在室外,精度高但是覆盖面太小,

全部报文调试好以后还需要加载13位时间戳,否则格物平台无法正常记录数据,这对单片机来说有点麻烦,PC上很容易获取日期参数,我这里的解决方案是,通过7S1模组先读取UTC-8北京时间

然后转换成格林尼治时间,最后计算出13位时间戳,下面是我用C写的单片机时间戳转换程序,实战OK,用单片机也能搞定13位时间戳。

注意格物平台设备单个上传和批量上传用的TOPIC不一样,要记住切换!!

上述这些软件都很容易获得,我这也有下载好的,大家也可以联系(我17717361475)要,免费送软件,买现成的4G模组也可以,自己学习或者控制设备都可以,模组自带温度采集传感器,有硬件学习调试比较方便,物联网一定要实战才行,软件模拟能过的东西,硬件不一定行

模组购买网店链接 https://m.tb.cn/h.UjFcy5I?tk=qgb7d45gUwl CZ3457

欢迎同行多交流,相互促进,相互学习!

下面是北京时间UTC-8 转13位时间戳,并且在OLED屏幕能看到变化 ,

            

             rYear=2000+((Rec_Buf1[17]-0x30)*10)+(Rec_Buf1[18]-0x30);//年

             rMon=(Rec_Buf1[20]-0x30)*10+(Rec_Buf1[21]-0x30);//

             rDay=(Rec_Buf1[23]-0x30)*10+(Rec_Buf1[24]-0x30);//

            

             rSHI=(Rec_Buf1[26]-0x30)*10+(Rec_Buf1[27]-0x30);//

             rFEN=(Rec_Buf1[29]-0x30)*10+(Rec_Buf1[30]-0x30);//

            rMIAO=(Rec_Buf1[32]-0x30)*10+(Rec_Buf1[33]-0x30);//

               Cyear=0;//注意这个寄存器使用前一定要清零,否则下面数是随机的,会出错

             for(i2 = 1970; i2 < rYear; i2++)//计算从1970年到现在总共有多少天,包括平年和闰年识别

               {

                if(((i2%4==0) && (i2%100!=0)) || (i2%400==0))  Cyear++;

               }

                

                 Count_Day = Cyear * 366 + (rYear-1970-Cyear) * 365;

                all_day=Count_Day+Mon_P[rMon]+rDay;//平年时2月按正常28天算

            if (rYear==2024||rYear==2028||rYear==2032||rYear==2036||rYear==2040||rYear==2044) //识别出闰年2月底多+1天          

            {   if (rMon>=3)

              {

                all_day=Count_Day+Mon_P[rMon]+rDay+1;//统计从1970年1月1日到今天总共天数,每个闰年 2月多算一天

              }

            }

            all_day=(all_day*86400)-28800;//年月日转换成秒数,并减去北京时区差,8小时(2880秒)

            all_time=((rSHI*60*60)+(rFEN*60)+rMIAO);//统计当前卫星时钟 时。分。秒。的总秒数

            all_second=(all_day+all_time);//算出当前 格林尼治时间,年.月.日.时.分.秒.全部累计秒数,精确到秒级,不考后3位虑毫秒

               

             OLED_ShowNum(10 ,3,all_time,8,12);//仿真

         

                           //下面就是获取的10位格林尼治时间,时间戳,OLED能显示观察

             UTC_13time[0]=all_second/1000000000;//取高位值

              Device_DT[135]=         UTC_13time[0]+0x30;//格林尼治时间戳导入报文--日期 1

             Device_temperature[129]=UTC_13time[0]+0x30;//   

                all_second=all_second%1000000000;//取余数

            

             UTC_13time[1]=all_second/100000000;//

              Device_DT[136]=         UTC_13time[1]+0x30;//格林尼治时间戳导入报文--日期 2

             Device_temperature[130]=UTC_13time[1]+0x30;//

                all_second=all_second%100000000;//取余数

            

             UTC_13time[2]=all_second/10000000;//

             Device_DT[137]=          UTC_13time[2]+0x30;//v格林尼治时间戳导入报文--日期 3

             Device_temperature[131]=UTC_13time[2]+0x30;//    

                all_second=all_second%10000000;//取余数

        

             UTC_13time[3]=all_second/1000000;//

              Device_DT[138]=         UTC_13time[3]+0x30;//格林尼治时间戳导入报文--日期 4

             Device_temperature[132]=UTC_13time[3]+0x30;//

                all_second=all_second%1000000;//取余数

                    

             UTC_13time[4]=all_second/100000;//

              Device_DT[139]=         UTC_13time[4]+0x30;//格林尼治时间戳导入报文--日期 5

             Device_temperature[133]=UTC_13time[4]+0x30;//

                all_second=all_second%100000;//取余数

            

              UTC_13time[5]=all_second/10000;//

              Device_DT[140]=         UTC_13time[5]+0x30;//格林尼治时间戳导入报文--日期 6

               Device_temperature[134]=UTC_13time[5]+0x30;//    

                all_second=all_second%10000;//取余数

            

             UTC_13time[6]=all_second/1000;//

              Device_DT[141]=         UTC_13time[6]+0x30;//格林尼治时间戳导入报文--日期 7

             Device_temperature[135]=UTC_13time[6]+0x30;//    

                all_second=all_second%1000;//取余数

            

             UTC_13time[7]=all_second/100;//

              Device_DT[142]=         UTC_13time[7]+0x30;//格林尼治时间戳导入报文--日期 8

             Device_temperature[136]=UTC_13time[7]+0x30;//

                all_second=all_second%100;//取余数

            

             UTC_13time[8]=all_second/10;//

              Device_DT[143]=         UTC_13time[8]+0x30;//格林尼治时间戳导入报文--日期 9

             Device_temperature[137]=UTC_13time[8]+0x30;//  

                all_second=all_second%10;//取余数

            

             UTC_13time[9]=all_second;//

              Device_DT[144]=         UTC_13time[9]+0x30;//格林尼治时间戳导入报文--日期 10  

             Device_temperature[138]=UTC_13time[9]+0x30;//         }

//--------------------------------------------

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值