【开源】ESP32怎样连接NEO6M模块接收GPS数据并显示在oled小屏幕上并可上传数据至Onenet云平台
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云平台相关推荐
- 52单片机连接ESP8266烧入固件使用MQTT协议将温湿度上传至OneNET云平台
52单片机连接ESP8266烧入固件使用MQTT协议连接OneNET云平台 参考: ---------------------------------------------------------- ...
- 连接中移Onenet云平台的C#上位机
为什么要做这个上位机 物联网作为近些年快速发展的产物,产品越来越丰富,应用场景也越来越广泛,因此相关的体量也不断在壮大,很多公司根据自己的战略需求开始除了开发自己的物联网硬件产品,同时也慢慢在完善自己 ...
- stm32——esp8266物联网开发,连接onenet云平台(http)做智能家居(1)
此处感谢b站up主--彼岸有光我们有船(我认为讲的和江科大老师一样好,如果习惯江科大老师的讲法的朋友们都可以看看捏) 提供的教程和最初的正点原子的源码,因为我学习的是江科大的stm32,所以进行了部分 ...
- NB-IOT专栏(QS-100模块二次开发)-onenet云平台+微信小程序实现下行数据控制设备开关
前言 最近公司老总买了NB-IOT的模块,老总考虑到STM32芯片的价格涨的很快,而我们的内容做的不是很复杂,再加上支持一下本地企业,QS-100模块到价格超级实惠,决定使用QS-100模块作为通信模 ...
- 用正点原子的精英版与onenet云平台连接
关于这个想法我也是做了接近3个月,由于一直没有找到现成的例子,加上修改端口但是看不懂原理,也是不愿意去做的,现在就展示下我这3个月的成品把 ![这是onenet的效果展示](https://img-b ...
- ESP8266通过TCP透传连接OneNet云平台实现数据互传——保姆级教程
OneNet云平台设置 登录OneNet云平台并注册账号 进入控制台 选择全部产品服务中的多协议接入 在多协议接入中选择"TCP透传",并添加产品 在添加产品中填写产品的基本信息( ...
- arduino UNO通过AT指令控制esp8266连接WiFi及onenet云平台
写下这篇文章是为了记录我学习使用esp8266的过程.在本文中我们会使用AT指令通过MQTT协议连接onenet云平台 开篇必看 1)关于onenet MQTT设备创建 在设备连接onenet平台中, ...
- 使用MQTT连接onenet云平台(九 两台网络调试助手互相通信)
一.说明 本次试验实现两个网络调试助手模拟两台设备通过MQTT连接到onenet云平台进行互相通信控制,模拟两台设备信息如下: 二.设备信息 2.1设备1信息 名称:testa 设备ID:925027 ...
- stm32 m5311上传gps数据上onenet云平台实现地图定位
新手,第一次写博客,如有不足请大家见谅并指出.下面开始正文. 本文是帮一个朋友做一个NB_Iot的小东西这个过程的学习记录吧. NB模块是M5311,然后还有一个stm32f103的最小系统开发板,后 ...
最新文章
- Extjs PROXY查询params无法传参,改用extraParams
- 2020年,计算机视觉领域会有哪些新的研究方向值得提前探索?
- WCF服务编程(4):《WCF服务编程》第3版中文版翻译结束,即将出版
- 1052 Linked List Sorting (25 分)【难度: 一般 / 知识点: 链表】
- 原始nginx.conf备份
- vue页面跳转后返回原页面初始位置
- 竖流式沉淀池集水槽设计计算_竖流沉淀池计算书
- 图像处理 - 滤波器 Filter
- if函数判断单元格颜色_IF条件函数10大用法完整版,全会是高手,配合SUMIF,VLOOKUP更逆天...
- linux pwm 调屏_linux驱动---bl_pwm驱动与backlight class实现背光调整
- xpdf 打开 chinapub中文pdf
- 纲要-Java网络爬虫系统性学习与实战(1)
- R语言从github安装recharts包
- 中国雅虎殒身记:当初说好的独立上市呢?
- NDK开发QQ语音变声
- 可控源音频大地电磁理论基础
- 数据同步工具—DataX—Web部署使用
- python基础:廖雪峰的官方网站Python(部分)笔记
- 打开用友软件提示 SQL Server口令怎么办?(含多种版本SQL Server数据库的安装方法)
- ChatGPT小技巧:论文降重
热门文章
- 分享一个强大的makedown编辑器
- The Suspects--并查集
- [转] UniCode编码表
- matlab求能量,matlab实现无线传感器网络DV-HOP算法中如何计算能量损耗
- 小程序wx.chooseMedia,chooseImage等会触发onshow,onload的坑
- 途乐证券股市资讯-英伟达,又创历史新高!美股全线上涨
- 碰瓷 MongoDB?MangoDB 正式改名为 FerretDB;谷歌和高通将在神经网络方面进行合作;PyCharm 2021.3 发布 | 开源日报
- 实体型转换为一个关系模式
- C# 热敏打印机 小票打印机 打印图片
- Aspera工具安装与使用