前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SIM800C连接OneNet平台HTTP协议上传GPS数据

SIM800C连接OneNet平台HTTP协议上传GPS数据

作者头像
DS小龙哥
发布2022-09-16 14:15:32
1.9K0
发布2022-09-16 14:15:32
举报
文章被收录于专栏:嵌入式项目开发

1. 前言

科技进步不断推动新产品的出现,越来越多的电子产品开始着力解决社会焦点问题,随着城市发展以及人口流动性的增加,儿童户外被拐,老人外出走丢,交通工具被盗和大型物件丢失等问题变样严重起来,因此,为了更好地利用现代科学技术解决社会关注的问题。本文就设计出一款基于STM32的智能云端定位器。 主控芯片采用STM32F103C8T6,联网模块采用SIM800C,云平台采用中国移动的OneNet平台。 STM32采集GPS定位数据之后,通过SIM800C将数据上传到OneNet平台进行实时显示。

在这里插入图片描述
在这里插入图片描述
image-20220408150916504
image-20220408150916504
image-20220408150715452
image-20220408150715452

接下来就一步一步完成,智能云端定位器的设计。

2. 创建产品

官网地址: https://open.iot.10086.cn/

image-20220408143221729
image-20220408143221729
image-20220408143241526
image-20220408143241526
image-20220408143327664
image-20220408143327664
image-20220408143350583
image-20220408143350583

3. 创建设备

点击创建好的产品名称,进入设备创建页面。

image-20220408143506700
image-20220408143506700

添加设备。

image-20220408143526173
image-20220408143526173
image-20220408143643023
image-20220408143643023

添加成功会,点击详情,查看详细信息。

image-20220408143702421
image-20220408143702421

添加APIkey

image-20220408143751585
image-20220408143751585
image-20220408143821165
image-20220408143821165

设备添加成功。

image-20220408143845361
image-20220408143845361

这个页面的设备ID和APIKEY需要保存下来,接下来SIM800C上传数据到onenet平台,就需要使用这个参数。

代码语言:javascript
复制
设备ID  :  920668935
APIKey :  XMwqaSZATs=ZlXq4Tk4NA44WTl4=

4. 创建数据流模板

image-20220408144101594
image-20220408144101594
image-20220408144132950
image-20220408144132950

添加成功。

image-20220408144155641
image-20220408144155641

5. STM32设备端代码

如果需要项目工程源码,可以去这里下载:https://download.csdn.net/download/xiaolong1126626497/85896011

(1)硬件接线

代码语言:javascript
复制
SIM800C接线说明:
GND----GND
VCC----3.3V
STM32_PA2----SIM800C_RXD
STM32_PA3----SIM800C_TXD

(2)实现的核心代码

代码语言:javascript
复制
/*
函数功能: 采用HTTP协议方式向OneNet服务器上报数据
函数参数:
				char *data_point:数据点的名称
				u32 data :上传的数据
*/
char OneNet_HTTP_CMD[1024];
char OneNet_HTTP_BUFF[300];
#define ONENET_DEVICE_ID "920668935"
#define ONENET_API_KEY "XMwqaSZATs=ZlXq4Tk4NA44WTl4="

void OneNet_HTTP_DataUpdate(char *data_point,u32 data)
{
		//拼接数据
	  snprintf(OneNet_HTTP_BUFF,sizeof(OneNet_HTTP_BUFF),
			"{\"datastreams\":[{\"id\":\"%s\",\"datapoints\":[{\"value\":%d}]}]}",data_point,data);

		//拼接数据
		snprintf(OneNet_HTTP_CMD,sizeof(OneNet_HTTP_CMD),
			"POST /devices/%s/datapoints HTTP/1.1\r\n" \
			"api-key:%s\r\n" \
			"Host:api.heclouds.com\r\n" \
			"Connection:close\r\n" \
			"Content-Length:%d\r\n" \
			"\r\n" \
			"%s",
	    ONENET_DEVICE_ID,ONENET_API_KEY,strlen(OneNet_HTTP_BUFF),OneNet_HTTP_BUFF
		);
		printf("OneNet_HTTP_CMD=%s\r\n",OneNet_HTTP_CMD);
		
		printf("连接服务器的状态:%d\r\n",SIM800C_Connect_TCP_Server("183.230.40.33","80"));
		DelayMs(500);
		printf("数据发送的状态:%d\r\n",SIIM800C_TCP_SendData((u8*)OneNet_HTTP_CMD,strlen(OneNet_HTTP_CMD)));
}

/*
函数功能: 采用HTTP协议方式向OneNet服务器上报GPS经纬度信息
函数参数:
				char *data_point:数据点的名称
				double Longitude,double latitude:上传的经纬度数据
*/
void OneNet_HTTP_GPS_DataUpdate(char *data_point,double Longitude,double latitude)
{
		//拼接数据
	  snprintf(OneNet_HTTP_BUFF,sizeof(OneNet_HTTP_BUFF),
			"{\"datastreams\":[{\"id\":\"%s\",\"datapoints\":[{\"value\":{\"lon\":%lf,\"lat\":%lf}}]}]}",
		   data_point,Longitude,latitude);

		//拼接数据
		snprintf(OneNet_HTTP_CMD,sizeof(OneNet_HTTP_CMD),
			"POST /devices/%s/datapoints HTTP/1.1\r\n" \
			"api-key:%s\r\n" \
			"Host:api.heclouds.com\r\n" \
			"Connection:close\r\n" \
			"Content-Length:%d\r\n" \
			"\r\n" \
			"%s",
	    ONENET_DEVICE_ID,ONENET_API_KEY,strlen(OneNet_HTTP_BUFF),OneNet_HTTP_BUFF
		);
		printf("GPS_OneNet_HTTP_CMD=%s\r\n",OneNet_HTTP_CMD);
		
		printf("连接服务器的状态:%d\r\n",SIM800C_Connect_TCP_Server("183.230.40.33","80"));
		DelayMs(500);
		printf("数据发送的状态:%d\r\n",SIIM800C_TCP_SendData((u8*)OneNet_HTTP_CMD,strlen(OneNet_HTTP_CMD)));
}

(3)上传数据格式总结

代码语言:javascript
复制
POST /devices/920668935/datapoints HTTP/1.1
api-key:XMwqaSZATs=ZlXq4Tk4NA44WTl4=
Host:api.heclouds.com
Connection:close
Content-Length:83

{"datastreams":[{"id":"GPS","datapoints":[{"value":{"lon":120.21,"lat":30.19}}]}]}

(4)OneNet显示效果

上传之后显示的效果。

image-20220408145733451
image-20220408145733451

可以通过地图可视化显示。

image-20220408145827272
image-20220408145827272

(5)main.c实现代码

代码语言:javascript
复制
#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include <stdio.h>
#include "timer.h"
#include "sim800c.h"
#include "gps.h"

/*
SIM800C接线说明:
GND----GND
VCC----3.3V
STM32_PA2----SIM800C_RXD
STM32_PA3----SIM800C_TXD
*/

char sim800c_buff[20];
char tmp_buffer[100];
double Longitude=103.718463; //经度
double latitude=36.107013;  //纬度

int main(void)
{
    u32 OneNet_Sendtime=0;
	u8 state;
	USART_X_Init(USART1,72,115200); //串口初始化
	printf("串口初始化完成!\r\n");
    
    //SIM800C的串口接口
	TIM2_Init(72,20000);//辅助串口3接收,超时时间为20ms
    USART_X_Init(USART2,36,9600); //可能的波特率(测试):  57600 、9600、115200
	
	//延时等待
	printf("延时等待\r\n");
	DelayMs(1000);
	DelayMs(1000);
	DelayMs(1000);
	DelayMs(1000);
	printf("开始初始化SIM800C \r\n");
    
	while(1)
	{
			state=SIM800C_InitCheck();
			if(state==0)break;
			DelayMs(1000);
			printf("SIM800C初始化状态:%d\r\n",state);
	}
	
    while(1)
	{
			state=SIM800C_SetNoteTextMode();
			if(state==0)break;
			DelayMs(1000);
			printf("设置文本模式状态:%d\r\n",state);
	}
    
	//同步网络时间
	//SIM800C_NtpUpdate();
	
	//初始化GPRS联网功能
	SIM800C_GPRS_Init();
    
	while(1)
	{
         delay_ms(1);
		 OneNet_Sendtime++;
        
		 //向云端发送一次数据(每次选择发送一种数据)
		 if(OneNet_Sendtime>=500) //单位ms
		 {
		      OneNet_Sendtime=0;
              
             //向OneNet上传经纬度数据
             OneNet_HTTP_GPS_DataUpdate("GPS",Longitude,latitude);
             
             //向指定手机发送短信,发送经纬度信息
            sprintf(sim800c_buff,"GPS:%f,%f",Longitude,latitude);
            if(SIM800C_SendNote((u8*)"13800138000",(u8*)sim800c_buff,strlen((char*)sim800c_buff))==0)
            {
                printf("短信发送成功\r\n");
            }
            else
            {
                printf("短信发送失败\r\n");    
            }    
		 }
		 
		//实时接收SIM00C返回的数据
         if(USART2_RX_FLAG)
         {
             USART2_RX_BUFF[USART2_RX_CNT]='\0';
             USART2_RX_CNT=0;
             USART2_RX_FLAG=0;
             printf("USART2_RX_BUFF=%s\r\n",USART2_RX_BUFF);
             memset(USART2_RX_BUFF,0,sizeof(USART2_RX_BUFF));
         }
	 }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 前言
  • 2. 创建产品
  • 3. 创建设备
  • 4. 创建数据流模板
  • 5. STM32设备端代码
    • (1)硬件接线
      • (2)实现的核心代码
        • (3)上传数据格式总结
          • (4)OneNet显示效果
            • (5)main.c实现代码
            相关产品与服务
            短信
            腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档