ESP32 GPS-Module in Camper

if i edit this

# Enable logging
logger:
  baud_rate: 0  # disables UART0 logging, allows GPS UART to be clean

I got this
(This occurs at all baud rates.
I tested them all one after the other under “UART Baud Rate:”)

INFO ESPHome 2025.6.3
INFO Reading configuration /config/esphome/gps.yaml...
INFO Detected timezone 'Europe/Berlin'
INFO Generating C++ source...
INFO Compiling app...
Processing gps (board: esp32-c3-devkitm-1; framework: arduino; platform: platformio/[email protected])
--------------------------------------------------------------------------------
HARDWARE: ESP32C3 160MHz, 320KB RAM, 4MB Flash
 - toolchain-riscv32-esp @ 8.4.0+2021r2-patch5
Dependency Graph
|-- AsyncTCP-esphome @ 2.1.4
|-- WiFi @ 2.0.0
|-- FS @ 2.0.0
|-- Update @ 2.0.0
|-- ESPAsyncWebServer-esphome @ 3.3.0
|-- DNSServer @ 2.0.0
|-- ESPmDNS @ 2.0.0
|-- noise-c @ 0.1.6
|-- TinyGPSPlus @ 1.1.0
Compiling .pioenvs/gps/src/main.cpp.o
Linking .pioenvs/gps/firmware.elf
RAM:   [=         ]  11.2% (used 36716 bytes from 327680 bytes)
Flash: [=====     ]  51.8% (used 950758 bytes from 1835008 bytes)
Building .pioenvs/gps/firmware.bin
Creating esp32c3 image...
Successfully created esp32c3 image.
esp32_create_combined_bin([".pioenvs/gps/firmware.bin"], [".pioenvs/gps/firmware.elf"])
SHA digest in image updated
Wrote 0xfba10 bytes to file /data/build/gps/.pioenvs/gps/firmware.factory.bin, ready to flash to offset 0x0
esp32_copy_ota_bin([".pioenvs/gps/firmware.bin"], [".pioenvs/gps/firmware.elf"])
========================= [SUCCESS] Took 8.09 seconds =========================
INFO Successfully compiled program.
esptool.py v4.8.1
Serial port /dev/ttyACM0
Connecting...
Chip is ESP32-C3 (QFN32) (revision v0.4)
Features: WiFi, BLE, Embedded Flash 4MB (XMC)
Crystal is 40MHz
MAC: 28:37:2f:75:23:14
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Flash will be erased from 0x00010000 to 0x000fbfff...
Flash will be erased from 0x00000000 to 0x00003fff...
Flash will be erased from 0x00008000 to 0x00008fff...
Flash will be erased from 0x0000e000 to 0x0000ffff...
Compressed 965136 bytes to 598893...
Wrote 965136 bytes (598893 compressed) at 0x00010000 in 7.3 seconds (effective 1050.7 kbit/s)...
Hash of data verified.
SHA digest in image updated
Compressed 12944 bytes to 9299...
Wrote 12944 bytes (9299 compressed) at 0x00000000 in 0.2 seconds (effective 432.0 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 144...
Wrote 3072 bytes (144 compressed) at 0x00008000 in 0.0 seconds (effective 575.2 kbit/s)...
Hash of data verified.
Compressed 8192 bytes to 47...
Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.1 seconds (effective 624.3 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
INFO Successfully uploaded program.
INFO UART logging is disabled (baud_rate=0). Not starting UART logs.

go to http://homeassistant.local:8123/config/esphome

if you see your device click on logs

Wait a few seconds

and you should see something like this

[14:22:07][D][gps:273]: GPS Position: lat=49.123456 lon=8.654321 alt=125.0m

if not try changing the baud rate on the gps

If you need USB logging, just remove baud_rate: 0 from logger component.
Esp32-C3 uses USB-CDC for logging, it doesn’t mess UART0 communication.

You need logs now to understand what’s going on…

I noted that possibility in my edit to my previous post. But - FYI, the spec you shared appears to be on the Ublox module itself. In your case the module appears to have upstream voltage regulation (3v-5v input) on the GY-GPS board.

yes the module had a voltaje regulator you can power with 5v it will lower itself to the correct voltaje

To definitely determine the device’s baud rate, one could connect it to a windows PC through a usb-uart adapter/cable, download and install U-blox U-center, and let it connect with auto-baud. This may also be a good way to confirm the device is actually working… separate from esphome.
If you don’t have a windows 10/11 compatible uart adapter, you can use an esp board as one - if set up correctly.

https://esphome.io/guides/devboard_as_flasher.html

I did this to configure specific settings for my module - since my usb serial adapter is not an authentic ftdi chip.

thats a good way to doit , not sure if hacki033 had the knowledge to do it

If that’s the case, I would recommend ordering the m10 (with or without the QMC5883L) and I can share the esphome yaml and a wiring diagram.

TBH, the M8N is old and the M10 is only $20-$25 on Amazon.

M10 - Amazon

The thing I’m a little lost on is the M8N module on a GY-GPS6 board. Every listing I see for a GY-GPS6MV2 board includes an 6M module.

The only boards I can find with M8N module are labeled GY-GPSV3-NEO.

I’m wondering if there’s a generation mismatch between module and board.

OK, thanks.
Then it’ll have to rest for now.
And I’ll probably order this M10.
Feel free to upload your code and wiring diagram here.

The module I have is from Aliexpress. I have no idea what’s built into it.

I don’t think we have actually seen a debug log.

Here is my yaml - if you don’t get the version with the compass built in, delete the i2c section and the qmc5883l sensor section. I have a different esp board than you, but again the critical part is the uart rx gpio on the esp needs to connect to the tx pin on the gps. You don’t need to connect anything to the rx pin on the gps - the data is only flowing one way. Perhaps, you can start fresh with your current setup, copy the below, delete the i2c/qmc5883l sensor sections, adjust for your gpios and try again.

esphome:
  name: gps
  friendly_name: GPS

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "64bmEXXByqC5Y5q709vuIYGB3snFxQQ/MTdPclYv3wo="

ota:
  - platform: esphome
    password: "4b53b07a96d554fbbd79056840ab7281"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Test Fallback Hotspot"
    password: "n6xZnamgSvID"

captive_portal:

i2c:
  sda: GPIO21
  scl: GPIO22
  scan: true
  id: bus_a

uart:
  rx_pin: GPIO16
  baud_rate: 115200

sensor:
  - platform: qmc5883l
    address: 0x0D
    field_strength_x:
      name: "QMC5883L Field Strength X"
    field_strength_y:
      name: "QMC5883L Field Strength Y"
    field_strength_z:
      name: "QMC5883L Field Strength Z"
    heading:
      name: "QMC5883L Heading"
    temperature:
      name: "QMC5883L Temperature"
      filters:
        - offset: 34.0
    range: 200uT
    oversampling: 512x
    update_interval: 5s

# Declare GPS module
gps:
  latitude:
    name: "Latitude"
  longitude:
    name: "Longitude"
  altitude:
    name: "Altitude"
  speed:
    name: "Speed"
  satellites: 
    name: "Satellites"
  course: 
    name: "Course"
  hdop: 
    name: "Accuracy"
  update_interval: 30s

# GPS as time source
time:
  - platform: gps
    id: gps_time