はじめに
ESP32にてUARTを利用する場合Arduinoとは若干使い方が異なります。GPSモジュールやそのほかモジュールと接続する場合に毎回調べてしまうので、備忘録的に記録しておきます。
使用モジュール
・ESP32 DevkitC
・GPS(ublox NEO-6M)TinyGPS++は予めインストールしておいてください。
ESP32での基本的なUART使い方
Serial | RX | TX |
---|---|---|
Serial | 3 | 1 |
Serial1 | ※要宣言 | ※要宣言 |
Serial2 | 16 | 17 |
ESP32でUART1使用時の注意点
UART1についてはそのままでは使用することができません。
Serial1.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN);
このように宣言することでRX,TXをそれぞれ割り当てることができます。
UART1(Serial1)を使用するコード
ESP32でSerial
をそのまま使用する場合は
HardwareSerial
やSoftwareSerial
の宣言は不要です。
#include <TinyGPS++.h>
TinyGPSPlus gps;
float gps_lat; //緯度
float gps_longt; //経度
int RX_PIN = 23;
int TX_PIN = 22;
void setup()
{
// シリアルポート開始
Serial.begin(115200);
Serial1.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN);
}
void loop() {
// Serial.println("test");
while (Serial1.available() > 0) {
char c = Serial1.read();
gps.encode(c);
if (gps.location.isUpdated()) {
gps_lat = gps.location.lat();
gps_longt = gps.location.lng();
Serial.print("LAT: "); Serial.println(gps_lat,9);
Serial.print("LONG: "); Serial.println(gps_longt,9);
delay(5000);
}
}
delay(1000);
}
UART2(Serial2)を使用するコード
こちらはTX,RXを指定ピンに接続することで宣言は不要です。
#include <TinyGPS++.h>
TinyGPSPlus gps;
float gps_lat; //緯度
float gps_longt; //経度
void setup()
{
// シリアルポート開始
Serial.begin(115200);
Serial2.begin(9600); // NEO-7M デフォルト
}
void loop() {
while (Serial2.available() > 0) {
char c = Serial2.read();
gps.encode(c);
if (gps.location.isUpdated()) {
gps_lat = gps.location.lat();
gps_longt = gps.location.lng();
Serial.print("LAT: "); Serial.println(gps_lat,9);
Serial.print("LONG: "); Serial.println(gps_longt,9);
delay(5000);
}
}
}