GPS_OLED(SSD1306)
Dependencies: Adafruit_GFX mbed-src
Fork of GPS_HelloWorld by
알아두기
- GPS 시간정보(수신데이터분석) : https://socatelier.wordpress.com/2015/07/27/received-data-of-gps/
- Adafruit GPS : https://socatelier.wordpress.com/2015/07/27/adafruit-gps/
사용제품 및 프로그램
- WIZwiki-W7500 : http://shop.wiznet.co.kr/front/contents/main/main.asp
- Adafruit GPS : https://learn.adafruit.com/adafruit-ultimate-gps
- SSD1306 `0.98 : https://learn.adafruit.com/ssd1306-oled-displays-with-raspberry-pi-and-beaglebone-black
- Jumper line
- mbed Web compile :http://mbed.org/
하드웨어 구성
아래의 그림과 같이 연결하면 된다.
WIZwiki-W7500 | GPS | OLED |
3.3V | Vin | Vcc or Vin |
GND | GND | GND |
SCL | SCL | |
SDA | SDA | |
D0 | TX | |
D1 | RX |
소프트웨어 구성
Link : https://developer.mbed.org/users/eunkyoungkim/code/GPS_OLED_HelloWorld/
아래는 mbed Web compiler에서 사용한 Source Code이다. 위의 링크로 가면 GPS/OLED의 Library도 같이 볼수 있다.
include the mbed library with this snippet
/* Example showing how to hook up to different GPS modules (GlobalSat EM406a and Adafruit Ultimate GPSv3) * to emulated serial ports at different speeds */ #include "mbed.h" #include "GPS.h" #include "Adafruit_SSD1306.h" class I2CPreInit : public I2C { public: I2CPreInit(PinName sda, PinName scl) : I2C(sda, scl) { frequency(100000); start(); }; }; #ifdef TARGET_WIZwiki_W7500 GPS gpsAda(D1, D0, 9600); I2CPreInit gI2C(PA_10,PA_9); #else GPS gpsAda(P0_12, P0_15, 9600); GPS gpsSpark(P0_4, P0_0, 4800); #endif // an SPI sub-class that provides a constructed default Adafruit_SSD1306_I2c gOled(gI2C,NC,0x78,64,128); Serial pc(USBTX, USBRX); int main() { char ch[] = {"Adafruit"}; char ch1[] = {"Sparkfun Breakout"}; gOled.begin(); gOled.clearDisplay(); while (1) { #ifndef TARGET_WIZwiki_W7500 if(gpsSpark.sample()) { pc.printf("set %c\t%f\t%f\t%f\t%f\t%f\n\r", 'Sparkfun Breakout', gpsSpark.longitude, gpsSpark.latitude, gpsSpark.alt, gpsSpark.geoid, gpsSpark.time); } #endif if(gpsAda.sample()) { pc.printf("set %s\t%f\t%f\t%f\t%f\t%f\n\r", ch, gpsAda.longitude, gpsAda.latitude, gpsAda.alt, gpsAda.geoid, gpsAda.time); //Time gOled.printf("T : %Lf\n", gpsAda.time); //longitude(경도) gOled.printf("LO : %f\n", gpsAda.longitude); //latitude(위도) gOled.printf("LA : %f\n", gpsAda.latitude); gOled.printf("AL : %f\n", gpsAda.alt); gOled.printf("G : %f\n", gpsAda.geoid); gOled.display(); gOled.setTextCursor(0,0); } } }
결과
현재 내가 있는 위치의 GPS정보이다. 아래의 그림은 구글 지도에서의 GPS정보이다.
표로 정리하면 아래와 같다.
OLED | google map | |
latitude(위도) | 37.377090 | 37.378633 |
longitude(경도) | 127.113701 | 127.113032 |
main.cpp@5:c285bc7cb4a1, 2015-07-27 (annotated)
- Committer:
- eunkyoungkim
- Date:
- Mon Jul 27 02:00:05 2015 +0000
- Revision:
- 5:c285bc7cb4a1
- Parent:
- 4:adab2bc0f548
Added GPS and OLED
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
8fromPi | 1:bf6b98a2e480 | 1 | /* Example showing how to hook up to different GPS modules (GlobalSat EM406a and Adafruit Ultimate GPSv3) |
8fromPi | 1:bf6b98a2e480 | 2 | * to emulated serial ports at different speeds */ |
simon | 0:6b7345059afe | 3 | #include "mbed.h" |
simon | 0:6b7345059afe | 4 | #include "GPS.h" |
eunkyoungkim | 4:adab2bc0f548 | 5 | #include "Adafruit_SSD1306.h" |
simon | 0:6b7345059afe | 6 | |
eunkyoungkim | 4:adab2bc0f548 | 7 | class I2CPreInit : public I2C |
eunkyoungkim | 4:adab2bc0f548 | 8 | { |
eunkyoungkim | 4:adab2bc0f548 | 9 | public: |
eunkyoungkim | 4:adab2bc0f548 | 10 | I2CPreInit(PinName sda, PinName scl) : I2C(sda, scl) |
eunkyoungkim | 4:adab2bc0f548 | 11 | { |
eunkyoungkim | 4:adab2bc0f548 | 12 | frequency(100000); |
eunkyoungkim | 4:adab2bc0f548 | 13 | start(); |
eunkyoungkim | 4:adab2bc0f548 | 14 | }; |
eunkyoungkim | 4:adab2bc0f548 | 15 | }; |
eunkyoungkim | 2:fe4f88d6c579 | 16 | |
eunkyoungkim | 2:fe4f88d6c579 | 17 | #ifdef TARGET_WIZwiki_W7500 |
eunkyoungkim | 2:fe4f88d6c579 | 18 | GPS gpsAda(D1, D0, 9600); |
eunkyoungkim | 4:adab2bc0f548 | 19 | I2CPreInit gI2C(PA_10,PA_9); |
eunkyoungkim | 2:fe4f88d6c579 | 20 | #else |
eunkyoungkim | 2:fe4f88d6c579 | 21 | GPS gpsAda(P0_12, P0_15, 9600); |
eunkyoungkim | 2:fe4f88d6c579 | 22 | GPS gpsSpark(P0_4, P0_0, 4800); |
eunkyoungkim | 2:fe4f88d6c579 | 23 | #endif |
8fromPi | 1:bf6b98a2e480 | 24 | |
eunkyoungkim | 4:adab2bc0f548 | 25 | // an SPI sub-class that provides a constructed default |
eunkyoungkim | 4:adab2bc0f548 | 26 | |
eunkyoungkim | 4:adab2bc0f548 | 27 | Adafruit_SSD1306_I2c gOled(gI2C,NC,0x78,64,128); |
simon | 0:6b7345059afe | 28 | Serial pc(USBTX, USBRX); |
simon | 0:6b7345059afe | 29 | |
simon | 0:6b7345059afe | 30 | int main() { |
eunkyoungkim | 4:adab2bc0f548 | 31 | |
eunkyoungkim | 4:adab2bc0f548 | 32 | gOled.begin(); |
eunkyoungkim | 4:adab2bc0f548 | 33 | gOled.clearDisplay(); |
8fromPi | 1:bf6b98a2e480 | 34 | while (1) { |
eunkyoungkim | 2:fe4f88d6c579 | 35 | #ifndef TARGET_WIZwiki_W7500 |
8fromPi | 1:bf6b98a2e480 | 36 | if(gpsSpark.sample()) { |
eunkyoungkim | 2:fe4f88d6c579 | 37 | pc.printf("set %c\t%f\t%f\t%f\t%f\t%f\n\r", 'Sparkfun Breakout', gpsSpark.longitude, gpsSpark.latitude, gpsSpark.alt, gpsSpark.geoid, gpsSpark.time); |
8fromPi | 1:bf6b98a2e480 | 38 | } |
eunkyoungkim | 2:fe4f88d6c579 | 39 | #endif |
8fromPi | 1:bf6b98a2e480 | 40 | if(gpsAda.sample()) { |
eunkyoungkim | 4:adab2bc0f548 | 41 | gOled.printf("T : %Lf\n", gpsAda.time); |
eunkyoungkim | 4:adab2bc0f548 | 42 | gOled.printf("LO : %f\n", gpsAda.longitude); |
eunkyoungkim | 4:adab2bc0f548 | 43 | gOled.printf("LA : %f\n", gpsAda.latitude); |
eunkyoungkim | 4:adab2bc0f548 | 44 | gOled.printf("AL : %f\n", gpsAda.alt); |
eunkyoungkim | 4:adab2bc0f548 | 45 | gOled.printf("G : %f\n", gpsAda.geoid); |
eunkyoungkim | 4:adab2bc0f548 | 46 | gOled.display(); |
eunkyoungkim | 4:adab2bc0f548 | 47 | gOled.setTextCursor(0,0); |
eunkyoungkim | 4:adab2bc0f548 | 48 | } |
8fromPi | 1:bf6b98a2e480 | 49 | |
simon | 0:6b7345059afe | 50 | } |
8fromPi | 1:bf6b98a2e480 | 51 | |
8fromPi | 1:bf6b98a2e480 | 52 | } |