การใช้งาน GPS โมดูล กับ STM32
การใช้งาน GPS โมดูล กับ STM32 รุ่น STM32F407VET6

บทความนี้ กล่าวถึงขั้นตอนการใช้งาน โมดูล GPS รุ่น GY-NEO6MV2 NEO-6M กับ STM32 รุ่น STM32F407VET6 โดยใช้การสื่อสารกันผ่านพอร์ตอนุกรมแบบ UART และแสดงผล ละติจูด , ลองจิจูด ที่จอ LCD 16×2

GPS ย่อมาจาก Global Positioning System และใช้เพื่อตรวจจับละติจูดและลองจิจูดของตำแหน่งใด ๆ บนโลกโดยมีเวลา UTC ที่แน่นอน (Universal Time Coordinated) อุปกรณ์นี้รับพิกัดจากดาวเทียมเป็นรายวินาทีพร้อมเวลาและวันที่ GPS ให้ความแม่นยำสูงและยังให้ข้อมูลอื่น ๆ นอกเหนือจากพิกัดตำแหน่ง

เราทุกคนทราบดีว่า GPS เป็นอุปกรณ์ที่มีประโยชน์มากและนิยมใช้ในโทรศัพท์มือถือและอุปกรณ์พกพาอื่น ๆ เพื่อติดตามตำแหน่ง มีแอพพลิเคชั่นที่หลากหลายในทุกสาขาตั้งแต่การเรียกแท็กซี่ที่บ้านของคุณเพื่อติดตามระดับความสูงของเครื่องบิน

GPS โมดูล รุ่น GY-NEO6MV2 NEO-6M


GY-NEO6MV2 NEO-6M

GY-NEO6MV2 NEO-6M โมดูล GPS นี้มีสี่ขา + 5V, GND, TXD และ RXD โดย จะสื่อสารกันผ่านพอร์ตอนุกรมแบบ UART และสามารถเชื่อมต่อกับพอร์ตอนุกรม ของ STM32F407VET6 ได้อย่างง่ายดาย

STM32 สื่อสารกันผ่านพอร์ตอนุกรมแบบ UART

UART หรือชื่อเต็ม Universal Asynchronous Receiver and Transmitter เป็นการสื่อสารข้อมูลผ่านพอร์ตอนุกรมแบบอะซิงโครนัส (asynchronous serial communication) ระหว่างอุปกรณ์ต่าง ๆ ซึ่งนิยมใช้เป็นการสื่อสารระหว่างไมโครคอนโทรลเลอร์ด้วยกัน การทำงานแบบอะซิงโครนัสหมายความว่าจะไม่มีสัญญาณนาฬิกา (clock signal) ส่งออกมาจากตัวส่งหรือตัวรับเพื่อกำหนดจังหวะการรับส่งข้อมูล แต่จะกำหนดผ่านโดยการตั้งความเร็วในการรับส่งข้อมูลของอุปกรณ์ดังกล่าวแทน



ขั้นตอนการทํางาน

1 : ทดสอบการใช้งานจอ LCD 16×2 กับ STM32

ทดสอบการใช้งานจอ LCD 16×2 กับ STM32 รุ่น STM32F407VET6 ตามลิงค์ด้านล่าง

2 : ติดตั้งไลบรารี TinyGPSPlus

สำหรับการใช้งานโมดูล GPS รุ่น GY-NEO6MV2 ต้องติดตั้งไลบรารี TinyGPSPlus เพิ่มเข้าไปที่ Arduino IDE

ดาวน์โหลดไลบรารีได้ที่ : TinyGPSPlus


ไปที่ Code -> Download ZIP

ติดตั้งไลบรารี TinyGPSPlus



เปิดโปรแกรม Arduino IDE ไปที่ Skecth -> Include Library -> Add .ZIP Library…

ไปที่ Skecth -> Include Library



ไปที่ ไลบรารี TinyGPSPlus ที่เรา ดาวน์โหลด มา -> Open

ไลบรารี TinyGPSPlus ดาวน์โหลด



ตรวจสอบที่ Skecth -> Include Library  จะพบ ไลบรารี TinyGPS++ เพิ่มเข้ามาใน Arduino IDE ของเรา

ไลบรารี TinyGPSPlus เพิ่มเข้ามาใน Arduino IDE



3 : อัพโหลดโค้ดให้กับ STM32


เขียนโปรแกรมและอัพโหลดโค้ดด้านล่างนี้ ไปที่ STM32


#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

#include <TinyGPS++.h>         //Library for using GPS functions
TinyGPSPlus gps;               //Object gps for class TinyGPSPlus


void setup()
{
  Serial1.begin(9600);         //Begins Serial comunication at Serial Port 1 at 9600 baudrate
  lcd.begin();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Circuit Digest");
  lcd.setCursor(0, 1);
  lcd.print("STM32 with GPS");
  delay(4000);
  lcd.clear();
}

void loop()
{
  GPSDelay(1000);
  unsigned long start;
  double lat_val, lng_val;
  bool loc_valid;
  lat_val = gps.location.lat();        //Gets the latitude
  loc_valid = gps.location.isValid();
  lng_val = gps.location.lng();        //Gets the longitude

  if (!loc_valid)                     //Excecutes when invalid data is received from GPS
  {
    lcd.print("Waiting");
    Serial.print("Latitude : ");
    Serial.println("*****");
    Serial.print("Longitude : ");
    Serial.println("*****");
    delay(4000);
    lcd.clear();
  }
  else                              //Excutes when valid data is received from GPS
  {
    lcd.clear();

    Serial.println("GPS READING: ");

    Serial.print("Latitude : ");
    Serial.println(lat_val, 6);   //Prints latitude at Serial Monitor

    lcd.setCursor(0, 0);
    lcd.print("LAT:");
    lcd.print(lat_val, 6);        //Prints latitude at LCD display

    Serial.print("Longitude : ");
    Serial.println(lng_val, 6);   //Prints longitude at Serial monitor

    lcd.setCursor(0, 1);
    lcd.print("LONG:");
    lcd.print(lng_val, 6);         //Prints longitude at LCD display

    delay(4000);
  }
}

static void GPSDelay(unsigned long ms)          //Delay for receiving data from GPS
{
  unsigned long start = millis();
  do
  {
    while (Serial1.available())
      gps.encode(Serial1.read());
  } while (millis() - start < ms);
}



4 : เชื่อมต่อ โมดูล GPS เข้ากับ STM32 ตามรูปด้านล่าง



เชื่อมต่อสายระหว่าง GY-NEO6MV2 กับ STM32F407VET6

การใช้งาน GPS โมดูล กับ STM32
ขา STM32F407VET6
ขา STM32F407VET6



5 : ผลลัพธ์การทำงาน

เชื่อมต่อแหล่งจ่ายไฟ 5V ให้กับ STM32 โดยเสียบสาย USB ระหว่าง STM32 กับ คอมพิวเตอร์ หรือ พาวเวอร์แบงค์

การใช้งาน GPS โมดูล กับ STM32


ถ้าไม่สามารถจับสัญญาณ GPS ได้ หรือรอสัญญาณ GPS จะแสดงข้อความ Waiting (ให้รอจนกระทั่งจับสัญญาณ GPS ได้)


ผลลัพธ์การทำงาน บรรทัดบนแสดงค่า ละติจูด (LAT) และ บรรทัดล่างแสดงค่า ลองจิจูด (LONG) แสดงว่าโมดูล GPS พร้อมใช้งานกับ STM32 แล้ว

การใช้งาน GPS โมดูล กับ STM32
การใช้งาน GPS โมดูล กับ STM32



6 : อุปกรณ์ที่ใช้



credit : https://circuitdigest.com/microcontroller-projects/interfacing-stm32f103c8-with-gps-module-to-track-location-coordinates