esp8266+atgm336h上传gps定位到巴法云

#include <ESP8266WiFi.h>
#include <SoftwareSerial.h>

// WiFi credentials
const char* WIFI_SSID = "2";
const char* WIFI_PASSWORD = "shabihaha";

// Bafa Cloud server configuration
const char* TCP_SERVER_ADDR = "bemfa.com";
const char* TCP_SERVER_PORT = "8344";
const char* UID = "0d40008355ac476ba9ccf4e938470244";
const char* GPS_TOPIC = "aaa1004";

// GPS module connection
const int GPS_RX_PIN = D5; // GPS TX pin to ESP8266 RX pin
const int GPS_TX_PIN = D6; // GPS RX pin to ESP8266 TX pin

SoftwareSerial gpsSerial(GPS_RX_PIN, GPS_TX_PIN);
WiFiClient client;

void setup() {
  Serial.begin(115200);
  gpsSerial.begin(9600);
  
  connectToWiFi();
}

void loop() {
  while (gpsSerial.available() > 0) {
    processGPSData();
  }
}

void connectToWiFi() {
  Serial.println();
  Serial.print("Connecting to WiFi...");
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void processGPSData() {
  String gpsData = gpsSerial.readStringUntil('\n');
  Serial.println("Raw GPS data: " + gpsData);

  if (gpsData.startsWith("$GNGGA") || gpsData.startsWith("$GNGLL") || gpsData.startsWith("$GPRMC")) {
    String parts[15];
    int partIndex = 0;
    int startIndex = 0;
    for (int i = 0; i < gpsData.length(); i++) {
      if (gpsData.charAt(i) == ',') {
        parts[partIndex] = gpsData.substring(startIndex, i);
        startIndex = i + 1;
        partIndex++;
      }
    }

    String latitude;
    String longitude;
    if (gpsData.startsWith("$GNGGA")) {
      if (parts[2] != "" && parts[4] != "") {
        latitude = convertToDecimal(parts[2], parts[3]);
        longitude = convertToDecimal(parts[4], parts[5]);
      }
    } else if (gpsData.startsWith("$GNGLL")) {
      if (parts[1] != "" && parts[3] != "") {
        latitude = convertToDecimal(parts[1], parts[2]);
        longitude = convertToDecimal(parts[3], parts[4]);
      }
    } else if (gpsData.startsWith("$GPRMC")) {
      if (parts[3] != "" && parts[5] != "") {
        latitude = convertToDecimal(parts[3], parts[4]);
        longitude = convertToDecimal(parts[5], parts[6]);
      }
    }

    if (latitude != "" && longitude != "") {
      uploadToBafaCloud(latitude, longitude);
    }
  }
}

String convertToDecimal(String degrees, String direction) {
  // Parse degrees, minutes and seconds
  int dotIndex = degrees.indexOf('.');
  int d = degrees.substring(0, dotIndex - 2).toInt();
  int m = degrees.substring(dotIndex - 2, dotIndex).toInt();
  float s = degrees.substring(dotIndex).toFloat();

  // Convert to decimal degrees
  float decimal = d + (m / 60.0) + (s / 3600.0);

  // Adjust for direction
  if (direction == "S" || direction == "W") {
    decimal = -decimal;
  }

  return String(decimal, 6); // Return as string with 6 decimal places
}

void uploadToBafaCloud(String latitude, String longitude) {
  if (!client.connect(TCP_SERVER_ADDR, atoi(TCP_SERVER_PORT))) {
    Serial.println("Failed to connect to Bafa Cloud server");
    return;
  }
  String uploadData = "cmd=2&uid=" + String(UID) + "&topic=" + String(GPS_TOPIC) +
                      "&msg=Latitude:" + latitude + ",Longitude:" + longitude + "\r\n";
  client.print(uploadData);
  Serial.println("GPS Data uploaded to Bafa Cloud server: " + uploadData);
  client.stop();
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32单片机读写 ATGM336H(GPS)模块+液晶显示DEMO软件例程源码,可做为你的学习设计参考。 int main(void) { uint32_t lcdid; char cStr[100]; double deg_lat;//转换成[degree].[degree]格式的纬度 double deg_lon;//转换成[degree].[degree]格式的经度 nmeaINFO info; //GPS解码后得到的信息 nmeaPARSER parser; //解码时使用的数据结构 uint8_t new_parse=0; //是否有新的解码数据标志 nmeaTIME beiJingTime; //北京时间 /* 复位所有外设,初始化Flash接口和系统滴答定时器 */ HAL_Init(); /* 配置系统时钟 */ SystemClock_Config(); /* 初始化3.5寸TFT液晶模组,一般优先于调试串口初始化 */ lcdid=BSP_LCD_Init(); /* 初始化串口并配置串口中断优先级 */ MX_DEBUG_USART_Init(); MX_SPIFlash_Init(); MX_USARTx_Init(); /* 初始化LED */ LED_GPIO_Init(); /* 调用格式化输出函数打印输出数据 */ printf("LCD ID=0x%08X\n",lcdid); LCD_Clear(0,0,LCD_DEFAULT_WIDTH,LCD_DEFAULT_HEIGTH,BLACK); /* 开背光 */ LCD_BK_ON(); /* 设置用于输出调试信息的函数 */ nmea_property()->trace_func = &trace; nmea_property()->error_func = &error; nmea_property()->info_func = &gps_info; /* 初始化GPS数据结构 */ nmea_zero_INFO(&info); nmea_parser_init(&parser); /* 使用DMA传输数据到电脑端 */ HAL_UART_Receive_DMA(&husartx,gps_rbuff,GPS_RBUFF_SIZE); while(1) { if(GPS_HalfTransferEnd) /* 接收到GPS_RBUFF_SIZE一半的数据 */ { /* 进行nmea格式解码 */ nmea_parse(&parser, (const char*)&gps_rbuff[0], HALF_GPS_RBUFF_SIZE, &info); GPS_HalfTransferEnd = 0; //清空标志位 new_parse = 1; //设置解码消息标志 } else if(GPS_TransferEnd) /* 接收到另一半数据 */ { nmea_parse(&parser, (const char*)&gps_rbuff[HALF_GPS_RBUFF_SIZE], HALF_GPS_RBUFF_SIZE, &info); GPS_TransferEnd = 0; new_parse =1; } if(new_parse ) //有新的解码消息 { /* 对解码后的时间进行转换,转换成北京时间 */ GMTconvert(&info.utc,&beiJingTime,8,1); /* 输出解码得到的信息 */ printf("\r\n时间%d-%02d-%02d,%d:%d:%d\r\n", beiJingTime.year+1900, beiJingTime.mon,beiJingTime.day,beiJingTime.hour,beiJingTime.min,beiJingTime.sec); //info.lat lon中的格式为[degree][min].[sec/60],使用以下函数转换成[deg

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值