善悪の彼岸

社会人5年目、ものづくりと哲学と研究が好き

ATOM EchoにGPSユニット(AT6558)を繋げて動かそうとしたら死ぬほど苦戦した件

ATOM EchoにGPSユニット(AT6558)を繋げて、シリアル通信でGPS情報を取ってこようとしたところ、ATOM Echoがリセットしまくるという問題が起きて死ぬほど苦戦した。 ATOM EchoとGPSユニットを繋げようとしてる人はあんまり見つからなかったので、備忘録として残す。

やろうとしたこと

接続図

上記のようにATOM EchoからGrove端子を使ってGPS Unit(AT6558)を繋げて、UART通信でGPS情報を入手して、シリアルモニターに表示させようとした

起きた現象

  • M5 Stackの公式からサンプルコードを引っ張ってきて、ディスプレイに関するコードを消して実行したところ....
#include <M5Unified.h>

HardwareSerial GPSRaw(2);


void setup() {
    M5.begin();
    M5.Power.begin();
 Serial.begin(9600);
    GPSRaw.begin(9600);
}

void loop() {
    // put your main code here, to run repeatedly:

    if (GPSRaw.available()) {
        int ch = GPSRaw.read();
        Serial.write(ch);
    }
}
  • 以下のようなエラーメッセージが多発した。ATOM Echoが立ち上がってはリセットしている模様。
rst:0x8 (TG1WDT_SYS_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 188777542, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:1184
load:0x40078000,len:13232
load:0x40080400,len:3028
entry 0x400805e4
ets Jun  8 2016 00:22:57

rst:0x8 (TG1WDT_SYS_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 188777542, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:1184
load:0x40078000,len:13232
load:0x40080400,len:3028
entry 0x400805e4
ets Jun  8 2016 00:22:57
  • ATOM EchoがGPSユニット分の電力を供給できずリセットしまくってるのか?とか考えたけど違った。

原因

  • 公式のサンプルではM5 Stack Coreを使っているが、今回はATOM Echoを使ってるのでRXD,TXDのピンを指定してあげなければならなかった。
  • なのでシリアル通信の設定をしているところを以下のように変えた。
GPSRaw.begin(9600,SERIAL_8N1,32, 26);
  • GPSユニットとATOM EchoをGrove端子で繋げるとTXD=32ピン、RXD=26ピンに繋がるので、第3引数(RXDピン)を32, 第4引数(TXDピン)を26にしてあげる。実際の接続とは逆なので注意!私はそこに気づかず3時間溶かしました。

結果

  • 動いたコード
/*Press button to record,released button to playback*/

#include <M5Unified.h>

HardwareSerial GPSRaw(2);


void setup() {
    M5.begin();
    M5.Power.begin();
    Serial.begin(9600);
    GPSRaw.begin(9600,SERIAL_8N1,32, 26);
}

void loop() {
 
    if (GPSRaw.available()){
        int ch = GPSRaw.read();
        Serial.write(ch);
    }

    delay(100);
}
  • 上記のコードを書き込んでやるとシリアルモニターに以下のような形でGPS情報が表示された。解決。
$GNRMC,101228.000,V,,,,,,,150224,,,,,,,,,,N*2E
$GNZDA,101247.000,15,02,2024,00,00*4B
$GPTXT,01,01,01,ANTENNA OPEN*25
$GNGGA,101248.000,,,,,0,00,6.1,,,,,,*41
$GNGLL,,,,,101248.000,V,N*6A
$GPGSA,A,1,,,,,,,,,,,,,8.6,6.1,6.,,,,,,,N*2E
$GNZDA,101302.000,15,02,2024,00,00*4B
$GPTXT,01,01,01,ANTENNA OPEN*25
$GNGGA,101303.000,,,,,0,00,6.1,,,,,,*4F
$GNGLL,,,,,101303.000,V,N*6SA,A,1,,,,,,,,,,,,,8.6,6.1,6.0*3F
$BDGSA,A,1,,,,,,,,,,,,,8.6,6.1,6.0*2E

感想

  • まーじでしょうもないところで一日を無駄にしました。精進。