我是靠谱客的博主 着急星星,最近开发中收集的这篇文章主要介绍stm32c8t6通过onenet上传gps经度与维度,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

首先选用的单片机为stm32c8t6,协议为EDP协议

gps模块为sim868,其中用串口1打印出sim868的数据来调试

主要注意需要将sim868传的数据通过strtok分割然后将字符串转化为浮点型

sim868代码

#include "sim868.h"

extern char Uart2_Buf[200];

//sim868初始化函数

char *p1,*p2; 

GPS gps;


void sim868_gps_init(void)
{
	CLR_Buf2();
	UART2_SendString("AT+CGNSPWR=1rn");
	Delay_ms(1000);
	CLR_Buf2();
	UART2_SendString("AT+CGNSINFrn");
	Delay_ms(1000);
	UART1_SendString(Uart2_Buf);
			if((p1=(char*)strstr((const char*)Uart2_Buf,"CGNSINF:")),(p1!=NULL))//寻找开始符
		{				
			if((p2=(char*)strstr((const char*)p1,"OK")),(p2!=NULL))//寻找结束符
				//if((p2=(char*)strstr((const char*)Uart2_Buf,"OK")),(p2!=NULL))//寻找结束符
				{
					*p2=0;//添加结束符
					//p2=strtok((Uart2_Buf),",");
					p2=strtok((p1),",");
					p2=(char*)strtok(NULL,",");
					p2=(char*)strtok(NULL,",");
					
					p2=(char*)strtok(NULL,",");
					gps.lon=atof(p2);//将字符串转化为浮点型
					//UART1_SendString((char *) gps.lon);UART1_SendString("n");
					p2=(char*)strtok(NULL,",");
					gps.lat=atof(p2);
					//UART1_SendString((char *) gps.lat);UART1_SendString("n");
			    CLR_Buf2();

			}
		}	
}

与onenet通信的模块为ESP8266

ESP8266初始化

void ESP8266_Init(void)
{
	
	ESP8266_Clear();
	
	//UsartPrintf(USART_DEBUG, "1. ATrn");
	while(ESP8266_SendCmd("ATrn", "OK"))
	Delay_ms(500);
	
	//UsartPrintf(USART_DEBUG, "2. CWMODErn");
	while(ESP8266_SendCmd("AT+CWMODE=1rn", "OK"))
	Delay_ms(500);
	
	//UsartPrintf(USART_DEBUG, "3. AT+CWDHCPrn");
	while(ESP8266_SendCmd("AT+CWDHCP=1,1rn", "OK"))
	Delay_ms(500);
	
	//UsartPrintf(USART_DEBUG, "4. CWJAPrn");
	while(ESP8266_SendCmd(ESP8266_WIFI_INFO, "GOT IP"))//此处为WIFI信息
	Delay_ms(500);
	
	//UsartPrintf(USART_DEBUG, "5. CIPSTARTrn");
	while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT"))//服务器信息,官网查找
	Delay_ms(500);
	
	//UsartPrintf(USART_DEBUG, "6. ESP8266 Init OKrn");

}

与onenet通信

有需要就改成自己的变量名,前面的变量命需要和onenet中数据流名一样

unsigned char OneNet_FillBuf(char *buf)
{

			

    char text[32];
		
    memset(text, 0, sizeof(text));

    strcpy(buf, ",;");


		memset(text, 0, sizeof(text));
    sprintf(text, "lon,%f;", gps.lon);
    strcat(buf, text);
			
		memset(text, 0, sizeof(text));
    sprintf(text, "lat,%f;", gps.lat);
    strcat(buf, text);
	

		
    return strlen(buf);

}

主函数




int main(void)
{
    /* 配置SysTick 为10us中断一次 */
    SysTick_Init();
  

    /* LED 端口初始化 */
    LED_GPIO_Config();


		USART1_Init_Config(115200);    //调试用
		USART2_Init_Config(9600);      //串口2,sim868
    Usart3_Init(115200);				  //串口3,驱动ESP8266用
    ESP8266_Init();					      //初始化ESP8266
		sim868_gps_init();
    while(OneNet_DevLink())			//接入OneNET
	  Delay_ms(500);
    
		while(1)
		{
			Keep_Connet_Esp8266 ();		
		}

关于EDP协议的代码可以在onenet官网的文档自行下载

httpaxada.iot.10086.cn/bbs/thread-863-1-1.html

最后效果

 如果有人知道直接上传gps,请留言告诉我,谢谢

最后

以上就是着急星星为你收集整理的stm32c8t6通过onenet上传gps经度与维度的全部内容,希望文章能够帮你解决stm32c8t6通过onenet上传gps经度与维度所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部