基于STM32 4G模块的微信小程序环境监测系统设计

最近在做毕业设计,接触到了许多之前没碰过的,在这里写一写,希望能帮上有需要的同学

目录

一        系统整体设计

二        下位机设计

三        阿里云物联网平台

四        上位机设计

五        总结

        整体设计        

                先来说一说整体的设计,主要分为上位机和下位机的设计,下位机采集数据,上传数据到上位机,并在上位机展示人们能建议明白的数据展示界面。系统要求,监测环境CO2,甲醛,噪声,还有监测点的位置信息

        下位机设计

                硬件设计:

上面的图只是一个一开始最初的硬件图,下面给一个改版的

大家能明显看到,我基本都在用串口读取数据或者发,没用别的,主要是方便,本设计一共用了四个串口,上面这张图片不止四个,是因为CO2甲醛都是一个传感器,硬件上大概就是这样,我这里又省了电源部分,在我后面调试好代码后挖了一个坑,记住这里的坑。

                                在这里先给大家看看我调试时用的模块和板子

                                                                  整体样子

后续是模块化和立体化设计

底板

电源底板

底板加外壳

                软件设计:

                        方案一:freeRTOS实时操作系统挂载任务

                                任务一:从CO2检测传感器获取当前环境CO2浓度      

                                任务二:从甲烷检测传感器获取当前环境甲烷浓度    

                                任务三:通过ADC采集,从调理电路获取麦克风信号,获取噪声信号值 

                                任务四:从北斗模块串口获取北斗模块数据,解析数据                

                                任务五:将数据处理显示                                                             

                                任务六:将合并的数据通过串口交付给4G模块上传云端 

                     方案二:裸机前后台系统

                                后台:空着。

                                前台:中断里面不断的获取各种传感器的数据,并解析整合发送出去。

                        中断里面的代码;重定向了一下串口1和4,串口1是用来发数据给4G模块,串口4用发数据给串口屏,

重定向函数

int fputc(int c,FILE *f)
{
    uint8_t ch;  //定义一个无符号8位整型变量ch 并将字符C赋值给它
    ch = c;
    if(uart_xuanz==1){
    HAL_UART_Transmit(&huart1,&ch,1,1000);
    }
    if(uart_xuanz==2){
    HAL_UART_Transmit(&huart4,&ch,1,1000);
    }
    // 调用HAL库的串口发送函数,将ch发送到USART1串口,等待时间为1000ms
    return c;
}

串口中断

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
//回调接受函数,   第一个参数是串口的地址,第二个是接受的字符地址,第三个是接受的长度
    HAL_UART_Receive_IT(&huart2,Rarr,73);
    HAL_UART_Receive_IT(&huart3,CO2,9);
//    把收到的发送给串口,也就是电脑显示
//  Usart_sendString((uint8_t*)Rarr);
//    Usart_sendString((uint8_t*)CO2);
    gps_shuju();
    qiti_shuju();
      adc_z=getADC(&hadc1);
      uart_xuanz=2;
      printf("$%9.5f$%10.5f$%3.0f$%4.3f$%d$",wd_double/100,jd_double/100,qt_2,qt_1,(int)adc_z);
      uart_xuanz=1;      
      printf("x0.val=%d\xff\xff\xff",jd_int);
      printf("x1.val=%d\xff\xff\xff",wd_int);
      printf("x3.val=%d\xff\xff\xff",qt_1_int);
      printf("n0.val=%d\xff\xff\xff",qt_2_int);
      printf("n4.val=%d\xff\xff\xff",(int)adc_z);


}

                        下位机展示

                阿里云物联网平台

                                1.创建产品

                                        在实列平台创建自己的产品

                                2.在产品下添加设备

                                3.激活设备

                                激活后设备会显示在线或者离线状态,大家可以参考别人的博文,有详细的例程。大家可以参考一下,然后主要主要的是三元组,也就是设备的证书

还有就是需要注意一下topic,订阅和发布,

这样基本上就能用了,但大家会遇到一个问题就是设备和设备之间的topic不能相互订阅,就需要之间转发,基于Topic消息路由的M2M设备间通信

来自  <如何基于Topic消息路由实现的M2M设备间通信_阿里云物联网平台-阿里云帮助中心>、

3.创建新的topic路由关系

CreateTopicRouteTable

  

用这个API可以把两个不同设备的信息相互转发,如A(下位机设备)设备的消息再次转发到B(微信小程序端)设备,

参数

IotInstanceId   实列平台的ID   本作品的是iot-060a8dke  根据自己的填写

来自 <https://next.api.aliyun.com/api/Iot/2018-01-20/CreateTopicRouteTable?params={%22IotInstanceId%22:%22iot-060a8dke%22,%22SrcTopic%22:%22%2Fk0fzhJo3MA5%2F868739056446374%2Fuser%2Fupdate%22,%22DstTopic%22:[%22/k0fzhO938qG/wei_xin/user/get%22]}&tab=DEBUG>

SrcTopic    源topic  在这里是填写了A设备的自定义topic的发布

DstTopic   目标topic  在这里填写的是B设备自定义的topic的订阅

这是下位机发送上来的数据

                上位机

不管是用上面设计,都离不开前端界面,后端的数据获取,先来说一说可以用哪些

1.手机APP

2.微信小程序

3.应用程序

4.网页

        后端数据获取

上面这几种在我做毕业设计前都没碰过,但后面选择的时候大概了解了一下,基本都是前端界面的设计,后端的数据获取,后端又涉及到了数据库和服务器,太麻烦了直接用MQTT,比较方便,具体实现我这里也是参考了别人的博文微信小程序使用MQTT.js连接阿里云IoT物联网平台_阿里 mqtt js版本-CSDN博客

大家改改就行了,里面已经写得很详细了,我就不写了。

        后端数据

        微信小程序前端界面设计

大家可以去参考一下黄菊华黄老师的课程,在哔哩哔哩就能找到,咱们主要学一下界面布局,模板什么的,根据自己的项目去修改

        前端界面

大概就这些,后面等板子打好,焊接好,还有外壳这些弄好以后,我大概率会发布自己的第一个哔哩哔哩视频,大家有兴趣的可以先关注一波,后续发布再说。

作者:m0_73761362

物联沃分享整理
物联沃-IOTWORD物联网 » 基于STM32 4G模块的微信小程序环境监测系统设计

发表评论