esp32连接neo6m在oled上显示定位数据

第一部分 ESP32怎样连接NEO6M模块接收GPS数据并显示在oled小屏幕上并可上传数据至Onenet云平台

一.软件部分

  • 安装Arduino

    我们可以直接去官网上进行下载 https://www.arduino.cc/en/software


选择第一个

即可开始下载

  • 将Arduino设置为中文,选择File–打开Preferences–language–中文简体

  • 需要安装ESP32库,选择文件–首选项–在其他管理器开发地址写入https://dl.espressif.com/dl/package_esp32_index.json
    https://github.com/adafruit/Adafruit_SSD1306 一个是控制esp32,一个是oled屏幕的,输入完成点击确认

  • 选择工具–开发板–开发板管理器

  • 输入esp32

  • 点击安装即可
  • 需安装TinyGPSPlus库,
  • https://github.com/mikalhart/TinyGPSPlus/releases
  • arduino可以通过【项目】-【加载库】-【添加.zip库】-装指定离线库压缩包


2.相关代码

#include <PubSubClient.h>
#include "WiFi.h"
#include <Arduino.h>
#include "Ticker.h"#include <splash.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <TinyGPS++.h>#define SCREEN_WIDTH 128 // oled显示屏宽高
#define SCREEN_HEIGHT 64 //On ESP32: GPIO-21(SDA), GPIO-22(SCL)
#define OLED_RESET -1 //Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C //See datasheet for Address
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);#define RXD2 16
#define TXD2 17
HardwareSerial neogps(1);TinyGPSPlus gps;//gps函数const char *ssid = "honor";                 //wifi名
const char *password = "qq123456";         //wifi密码
const char *mqtt_server = "xxx.xxx.xx.xx"; //onenet 的 IP地址#define mqtt_devid "十位数"  //设备ID
#define mqtt_pubid "六位"     //产品ID
#define mqtt_password "自己设置的密码" //鉴权信息WiFiClient espClient;           //创建一个WIFI连接客户端
PubSubClient client(espClient); // 创建一个PubSub客户端, 传入创建的WIFI客户端char msg_buf[200];                                //发送信息缓冲区
char dataTemplate[] = "{\"lng\":%.6f,\"lat\":%.6f}"; //信息模板char msgJson[75];                                 //要发送的json格式的数据
unsigned short json_len = 0;                      //json长度
Ticker tim1;                                      //定时器,用来循环上传数据void setup() {Serial.begin(115200);//开始串行通信 Arduino IDE (串行监视器)//开始串行通讯 Neo6mGPSneogps.begin(9600, SERIAL_8N1, RXD2, TXD2);// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internallyif(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {Serial.println(F("SSD1306 allocation failed"));for(;;); // Don't proceed, loop forever}display.clearDisplay();display.display();delay(2000);//这个延时是为了让我打开串口助手setupWifi();                                           //调用函数连接WIFIclient.setServer(mqtt_server, 6002);                   //设置客户端连接的服务器,连接Onenet服务器, 使用6002端口client.connect(mqtt_devid, mqtt_pubid, mqtt_password); //客户端连接到指定的产品的指定设备.同时输入鉴权信息client.setCallback(callback);                          //设置好客户端收到信息是的回调tim1.attach(1, sendgps);                      //定时每20秒调用一次发送数据函数sendgps
}void loop() {boolean newData = false;for (unsigned long start = millis(); millis() - start < 1000;){while (neogps.available()){if (gps.encode(neogps.read())){newData = true;}}}//If newData is trueif(newData == true){newData = false;Serial.println(gps.satellites.value());print_speed();}else{display.clearDisplay();display.setTextColor(SSD1306_WHITE);display.setCursor(0, 0);display.setTextSize(3);display.print("No Data");display.display();}  if (!WiFi.isConnected()) //先看WIFI是否还在连接{setupWifi();}
if (!client.connected()) //如果客户端没连接ONENET, 重新连接{clientReconnect();}client.loop(); //客户端循环检测
}void print_speed()
{display.clearDisplay();display.setTextColor(SSD1306_WHITE);if (gps.location.isValid() == 1){//String gps_speed = String(gps.speed.kmph());display.setTextSize(1);display.setCursor(25, 5);display.print("Lat: ");display.setCursor(50, 5);display.print(gps.location.lat(),6);display.setCursor(25, 20);display.print("Lng: ");display.setCursor(50, 20);display.print(gps.location.lng(),6);display.setCursor(25, 35);display.print("Speed: ");display.setCursor(65, 35);display.print(gps.speed.kmph());display.setTextSize(1);display.setCursor(0, 50);display.print("SAT:");display.setCursor(25, 50);display.print(gps.satellites.value());display.setTextSize(1);display.setCursor(70, 50);display.print("ALT:");display.setCursor(95, 50);display.print(gps.altitude.meters(), 0);display.display();}else{display.clearDisplay();display.setTextColor(SSD1306_WHITE);display.setCursor(0, 0);display.setTextSize(3);display.print("No Data");display.display();}  }//连接WIFI相关函数
void setupWifi()
{delay(10);Serial.println("连接WIFI");WiFi.begin(ssid, password);while (!WiFi.isConnected()){Serial.print(".");delay(500);}Serial.println("OK");Serial.println("Wifi连接成功");
}//收到主题下发的回调, 注意这个回调要实现三个形参 1:topic 主题, 2: payload: 传递过来的信息 3: length: 长度
void callback(char *topic, byte *payload, unsigned int length)
{Serial.println("message rev:");Serial.println(topic);for (size_t i = 0; i < length; i++){Serial.print((char)payload[i]);}Serial.println();
}//向主题发送模拟的温湿度数据
void sendgps()
{if (client.connected()){snprintf(msgJson, 40, dataTemplate, gps.location.lng(), gps.location.lat()); //将模拟温湿度数据套入dataTemplate模板中, 生成的字符串传给msgJsonjson_len = strlen(msgJson);                   //msgJson的长度msg_buf[0] = char(0x03);                       //要发送的数据必须按照ONENET的要求发送, 根据要求,数据第一位是3msg_buf[1] = char(json_len >> 8);              //数据第二位是要发送的数据长度的高八位msg_buf[2] = char(json_len & 0xff);            //数据第三位是要发送数据的长度的低八位memcpy(msg_buf + 3, msgJson, strlen(msgJson)); //从msg_buf的第四位开始,放入要传的数据msgJsonmsg_buf[3 + strlen(msgJson)] = 0;              //添加一个0作为最后一位, 这样要发送的msg_buf准备好了Serial.print("public message:");Serial.println(msgJson);client.publish("$dp", (uint8_t *)msg_buf, 3 + strlen(msgJson)); //发送数据到主题$dp}
}//重连函数, 如果客户端断线,可以通过此函数重连
void clientReconnect()
{while (!client.connected()) //再重连客户端{Serial.println("reconnect MQTT...");if (client.connect(mqtt_devid, mqtt_pubid, mqtt_password)){Serial.println("connected");}else{Serial.println("failed");Serial.println(client.state());Serial.println("try again in 5 sec");delay(5000);}}
}

2.硬件连接

【开源】ESP32怎样连接NEO6M模块接收GPS数据并显示在oled小屏幕上并可上传数据至Onenet云平台相关推荐

  1. 52单片机连接ESP8266烧入固件使用MQTT协议将温湿度上传至OneNET云平台

    52单片机连接ESP8266烧入固件使用MQTT协议连接OneNET云平台 参考: ---------------------------------------------------------- ...

  2. 连接中移Onenet云平台的C#上位机

    为什么要做这个上位机 物联网作为近些年快速发展的产物,产品越来越丰富,应用场景也越来越广泛,因此相关的体量也不断在壮大,很多公司根据自己的战略需求开始除了开发自己的物联网硬件产品,同时也慢慢在完善自己 ...

  3. stm32——esp8266物联网开发,连接onenet云平台(http)做智能家居(1)

    此处感谢b站up主--彼岸有光我们有船(我认为讲的和江科大老师一样好,如果习惯江科大老师的讲法的朋友们都可以看看捏) 提供的教程和最初的正点原子的源码,因为我学习的是江科大的stm32,所以进行了部分 ...

  4. NB-IOT专栏(QS-100模块二次开发)-onenet云平台+微信小程序实现下行数据控制设备开关

    前言 最近公司老总买了NB-IOT的模块,老总考虑到STM32芯片的价格涨的很快,而我们的内容做的不是很复杂,再加上支持一下本地企业,QS-100模块到价格超级实惠,决定使用QS-100模块作为通信模 ...

  5. 用正点原子的精英版与onenet云平台连接

    关于这个想法我也是做了接近3个月,由于一直没有找到现成的例子,加上修改端口但是看不懂原理,也是不愿意去做的,现在就展示下我这3个月的成品把 ![这是onenet的效果展示](https://img-b ...

  6. ESP8266通过TCP透传连接OneNet云平台实现数据互传——保姆级教程

    OneNet云平台设置 登录OneNet云平台并注册账号 进入控制台 选择全部产品服务中的多协议接入 在多协议接入中选择"TCP透传",并添加产品 在添加产品中填写产品的基本信息( ...

  7. arduino UNO通过AT指令控制esp8266连接WiFi及onenet云平台

    写下这篇文章是为了记录我学习使用esp8266的过程.在本文中我们会使用AT指令通过MQTT协议连接onenet云平台 开篇必看 1)关于onenet MQTT设备创建 在设备连接onenet平台中, ...

  8. 使用MQTT连接onenet云平台(九 两台网络调试助手互相通信)

    一.说明 本次试验实现两个网络调试助手模拟两台设备通过MQTT连接到onenet云平台进行互相通信控制,模拟两台设备信息如下: 二.设备信息 2.1设备1信息 名称:testa 设备ID:925027 ...

  9. stm32 m5311上传gps数据上onenet云平台实现地图定位

    新手,第一次写博客,如有不足请大家见谅并指出.下面开始正文. 本文是帮一个朋友做一个NB_Iot的小东西这个过程的学习记录吧. NB模块是M5311,然后还有一个stm32f103的最小系统开发板,后 ...

最新文章

  1. Extjs PROXY查询params无法传参,改用extraParams
  2. 2020年,计算机视觉领域会有哪些新的研究方向值得提前探索?
  3. WCF服务编程(4):《WCF服务编程》第3版中文版翻译结束,即将出版
  4. 1052 Linked List Sorting (25 分)【难度: 一般 / 知识点: 链表】
  5. 原始nginx.conf备份
  6. vue页面跳转后返回原页面初始位置
  7. 竖流式沉淀池集水槽设计计算_竖流沉淀池计算书
  8. 图像处理 - 滤波器 Filter
  9. if函数判断单元格颜色_IF条件函数10大用法完整版,全会是高手,配合SUMIF,VLOOKUP更逆天...
  10. linux pwm 调屏_linux驱动---bl_pwm驱动与backlight class实现背光调整
  11. xpdf 打开 chinapub中文pdf
  12. 纲要-Java网络爬虫系统性学习与实战(1)
  13. R语言从github安装recharts包
  14. 中国雅虎殒身记:当初说好的独立上市呢?
  15. NDK开发QQ语音变声
  16. 可控源音频大地电磁理论基础
  17. 数据同步工具—DataX—Web部署使用
  18. python基础:廖雪峰的官方网站Python(部分)笔记
  19. 打开用友软件提示 SQL Server口令怎么办?(含多种版本SQL Server数据库的安装方法)
  20. ChatGPT小技巧:论文降重

热门文章

  1. 分享一个强大的makedown编辑器
  2. The Suspects--并查集
  3. [转] UniCode编码表
  4. matlab求能量,matlab实现无线传感器网络DV-HOP算法中如何计算能量损耗
  5. 小程序wx.chooseMedia,chooseImage等会触发onshow,onload的坑
  6. 途乐证券股市资讯-英伟达,又创历史新高!美股全线上涨
  7. 碰瓷 MongoDB?MangoDB 正式改名为 FerretDB;谷歌和高通将在神经网络方面进行合作;PyCharm 2021.3 发布 | 开源日报
  8. 实体型转换为一个关系模式
  9. C# 热敏打印机 小票打印机 打印图片
  10. Aspera工具安装与使用