【腾讯连连IoT开发大赛】移动物联网环境监测站

2021-01-11 09:12:27 浏览数 (2)

移动物联网环境监测站作品讲解和演示

一、产品概述

本产品通过物联网功能实现可移动的环境监测站,随时随地监测环境数据的同时上传数据到云平台,方便监测人员和监督人员同步测量环境数据。因为使用了4G网络,所以相比于NB-IoT来讲,它不受地域的限制,只要有移动通讯的地方就可以将数据上传到云平台。

本产品属于小型的移动监测站,比较适合外出携带进行环境监测,适用于个人或从事环境监测行业,目的是实现环境数据和地理位置实时回传到云平台。这样就可以动态监测不同区域的环境数据,同时也方便安装和布置。

二、产品的亮点:

主要亮点有:

1、 采用E53扩展板,方便更换环境监测传感器模块和调试,同一个底板重复利用,节约成本价。

2、 集成E53智慧农业扩展板和智慧物流扩展板共同采集数据,实现采集光照强度、温度、湿度、经度、纬度。

3、 实现环境数据和位置信息同步发送的云平台监测,并在腾讯云的位置服务显示监测站的地图位置。

4、 采用Cat1 4G模组实现移动连接云端,不受地域限制。

5、 采用以上模组就可以使用自己电话卡,所以只要有电话卡就可以将数据上报。

6、体积小,便携式,适合个人和企业使用。

三、方案设计

1、硬件部分:

1)主板采用ART_PI开发板,主控芯片是STM32H750;通过串口与L610模组通信连上腾讯云,通过I2C和个别GPIO引脚与E53扩展板连接,实现数据采集和控制。

STM32H750主控板STM32H750主控板

2)Cat1模块是使用广和通的L610模组:

广和通LTE Cat 1模组L610技术规格:

(1)L610是LTE-Cat1制式;

(2)L610的基带是展锐春藤 8910DM,是完全符合3GPP R13官方标准的 Cat.1bis通信终端解决方案;

(3)Cat1 最大上/下行速率 5Mbps UL/10Mbps DL;

(4)Cat.1 bis是唯一符合规范的Cat1单天线方案。

通过它可以实现户外将测量传感器数据发送到腾讯云平台,模组是通过ART-PI主板的UART1和一个GPIO引脚实现AT指令控制的。模组的供电电源由ART-PI主板5V引脚提供。

广和通 L610-CN-00 Cat1 模块广和通 L610-CN-00 Cat1 模块
双排插针引脚定义双排插针引脚定义
与开发板的连接图与开发板的连接图

3)环境监测传感器采用E53扩展板中的智慧农业和智慧物流模块。这两个模块的I2C引脚连在一起。这样可以用同样的接口读取不同的传感器数据,节省引脚,方便布局。当GPS模块读取到经纬度时就会闪烁,否则常亮。

E53_IA1和E53_ST1扩展板E53_IA1和E53_ST1扩展板
移动物联网环境监测站雏形移动物联网环境监测站雏形

2、软件部分:

使用STM32CubeMX软件生成STM32H750的MDK5裸机工程,然后通过腾讯官方文档移植TencentOS tiny内核和AT框架。本次方案主要参考了m5311的demo实现上云。在腾讯云物联网开发平台创建产品和设备后就可以实现读取设备上传的数据。

代码语言:javascript复制
发送的数据:
#define REPORT_DATA_TEMPLATE    "{\"method\":\"report\"\,\"clientToken\":\"00000001\"\,\"params\":{\"countdata\":%d,\"Humidity\":%d,\"brightness\":%d,\"Temperature\":%0.2f,\"Latitude\":%f,\"longitude\":%f,\"GPS_Ext\": \"lat:%f;lon:%f\" }}"
代码语言:javascript复制
该段代码是从TencentOS tiny的源码中移植过来的
void mqtt_demo_task(void)
{
    int ret = 0;
    int size = 0;
//    int lightness = 0;
    mqtt_state_t state;
    
    char *product_id = PRODUCT_ID;
    char *device_name = DEVICE_NAME;
    char *key = DEVICE_KEY;
    
    device_info_t dev_info;
    memset(&dev_info, 0, sizeof(device_info_t));   
    int  data_count=0 ;
	printf("Init........................................rn");
	while(1)
		{
  l610_sal_init(HAL_UART_PORT_1);
	tos_task_delay(1000);
	  
    ret = L610_tencent_firmware_sal_init(HAL_UART_PORT_1);
   
    if (ret < 0) {
        printf("L610 tencent firmware sal init fail, ret is %drn", ret);
    }

    strncpy(dev_info.product_id, product_id, PRODUCT_ID_MAX_SIZE);
    strncpy(dev_info.device_name, device_name, DEVICE_NAME_MAX_SIZE);
    strncpy(dev_info.device_serc, key, DEVICE_SERC_MAX_SIZE);
		
    tos_tf_module_info_set(&dev_info, TLS_MODE_PSK);

    mqtt_param_t init_params = DEFAULT_MQTT_PARAMS;
    if (tos_tf_module_mqtt_conn(init_params) != 0) {
        printf("module mqtt conn failn");
    } else {
        printf("module mqtt conn successn");
    }

    if (tos_tf_module_mqtt_state_get(&state) != -1) {
        printf("MQTT: %sn", state == MQTT_STATE_CONNECTED ? "CONNECTED" : "DISCONNECTED");
    }
    
    /* 开始订阅topic*/
    size = snprintf(sub_topic_name, TOPIC_NAME_MAX_SIZE, "$thing/down/property/%s/%s", product_id, device_name);

    if (size < 0 || size > sizeof(sub_topic_name) - 1) {
        printf("sub topic content length not enough! content size:%d  buf size:%d", size, (int)sizeof(sub_topic_name));
    }
    if (tos_tf_module_mqtt_sub(sub_topic_name, QOS1, default_message_handler) != 0) {
        printf("module mqtt sub failn");
    } else {
        printf("module mqtt sub successn");
    }
    
    memset(report_topic_name, sizeof(report_topic_name), 0);
    size = snprintf(report_topic_name, TOPIC_NAME_MAX_SIZE, "$thing/up/property/%s/%s", product_id, device_name);

    if (size < 0 || size > sizeof(report_topic_name) - 1) {
        printf("pub topic content length not enough! content size:%d  buf size:%d", size, (int)sizeof(report_topic_name));
    }
    

    while (1) {
            
        /* 上报值 */
        memset(payload, 0, sizeof(payload));
        snprintf(payload, sizeof(payload), REPORT_DATA_TEMPLATE, data_count  ,
					(int)E53_IA1_Data.Humidity,(int)E53_IA1_Data.Lux,E53_IA1_Data.Temperature,
					E53_ST1_Data.Latitude,E53_ST1_Data.Longitude,E53_ST1_Data.Latitude,E53_ST1_Data.Longitude);
 
        
        if (tos_tf_module_mqtt_pub(report_topic_name, QOS0, payload) != 0) {
            printf("module mqtt pub failn");
					//HAL_GPIO_WritePin(IA1_Light_GPIO_Port,IA1_Light_Pin,GPIO_PIN_SET);
            break;
        } else {
					HAL_GPIO_TogglePin(LED_B_GPIO_Port,LED_B_Pin);
					Light_Toggle();
          printf("module mqtt pub successn");
        }

        tos_sleep_ms(500);
    }
		//HAL_GPIO_WritePin(IA1_Light_GPIO_Port,IA1_Light_Pin,GPIO_PIN_RESET);
	}

}
上报json格式的数据上报json格式的数据
代码语言:javascript复制
数据采集和报警控制:
    void task1(void *pdata)
   {
     int count = 1;
		 Init_E53_IA1();
		 Init_E53_ST1();
       while(1)
       {
         E53_IA1_Read_Data();
				 E53_ST1_Read_Data();
			   printf("----------------------rnHumidity:%0.2frnLux:%0.2frnTemperature:%0.2frn----------------------rn",
				 E53_IA1_Data.Humidity,E53_IA1_Data.Lux,E53_IA1_Data.Temperature);
				 printf("                       rnLatitude:%frnLongitude:%frn                      rn",
				E53_ST1_Data.Latitude,E53_ST1_Data.Longitude);
                HAL_GPIO_TogglePin(LED_B_GPIO_Port,LED_B_Pin);
				 if(E53_IA1_Data.Temperature>33.0||E53_IA1_Data.Temperature<10.0)
				 {
				   E53_ST1_Beep();
				  tos_sleep_ms(100);
				 }
				else
          tos_sleep_ms(1000);
       }
   }
数据模板数据模板

使用腾讯连连小程序实时查看上传的数据,当前使用的是H5自定义方式,后期可以方便更新面板。如果切换回标准版本,就会提示如第一个图错误。

使用腾讯连连小程序实时查看上传的数据,当前使用的是H5自定义方式,后期可以方便更新面板。如果切换回标准版本,就会提示如下第一个图错误。

腾讯连连小程序腾讯连连小程序
在vscode编辑在vscode编辑
在开发者工具查看在开发者工具查看

这次方案的附加功能是使用到了数据开发和位置服务:

1)数据开发是可以推送相关信息到腾讯连连公众号,提醒设备采集的数据情况。以下有三个数据流:光照强度、温度、湿度。

数据流开发和公众号推送消息数据流开发和公众号推送消息

数据开发用户指南:https://cloud.tencent.com/document/product/1081/40292#.E6.95.B0.E6.8D.AE.E6.B5.81.E7.BC.96.E6.8E.92

2)位置服务是可以实现查看设备采集数据的地图,这样监测人员就不用手工记录地址和环境数据。

创建位置空间创建位置空间

监测站读取的经纬度数据上传后显示的位置监测站读取的经纬度数据上传后显示的位置

注:物联网平台位置服务使用指南https://cloud.tencent.com/document/product/1081/50278

四、IoT Explorer与腾讯连连使用感受

IoT Explorer平台给我最深感受是实现快速上云,基于官方齐全的Demo就可以快速创建的产品框架,本次大赛让我最意外的是发现了平台的位置服务功能,正好符合我本次的方案设计中使用的GPS模块,除了GPS定位,平台还提供了蜂窝地位功能,正好也符合L610模组,为了操作和后面的产品优化,本次方案只采用了GPS模块。这个好处是,后期可以增加LCD显示屏,这样即使没有SIM卡也可以正常使用读取显示经纬度数据,实现人工查询。

腾讯连连的最方便的地方是标准的面板,只要在数据模板增加或删除某个功能,它都自动调整,同时还支持H5自定义开发,可以设计个性化的界面。还有些意想不到的功能,就是可以云端定时控制下发指令,这个功能可以实现很多有意思的功能,例如移动充电桩,可以定时充电,还有定时开启家用电气,或者定时上报数据到云端,免除了设备自己定时操作,要想获得准确的时间很难。给我的感觉就是可以随时随地查看数据。

除了腾讯连连小程序,还有腾讯连连公众号,这个可以用于关注的重要数据,例如当打到设定条件时,都可以及时推送消息到公众号上,让你及时查看相关数据并采取措施预防。

五、活动的收获:

本次活动给我最大的是收获就是短时间内开发一个产品让人学习到很多东西,增强了克服困难的决心和信心,不然就早早放弃了。刚开始没有好的想法,所以不知道如何去做。直到有了新想法就有了前进的动力,不然就是重复别人做过的事,对于开发者来讲很不是滋味。也许我的这个方案对于很多人都实现了,但是我实现的方式不一样的,同样的数据采集方式,不一样的发送方式。

这个方案还有需要完善的地方,但是大体功能已经完成,可以实现真正的移动物联网环境监测站了。为了方便使用,我还特地拿胶布缠绕整个板子,防止身体上的静电击穿电子元件。如下面虽然丑却很实用的成品:

最后的成品最后的成品

0 人点赞