LoginSignup
1
0

More than 1 year has passed since last update.

ESP32にてGPSモジュールと接続するときにハマったこと(UARTの使い方)

Posted at

はじめに

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をそのまま使用する場合は
HardwareSerialSoftwareSerialの宣言は不要です。

#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);
    }
  }
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0