ESP32 Based GPS Navigator (LVGL - LovyanGFX).
- Note: Under development (experimental features under devel branch)
- There is the possibility to use two types of maps: Rendered Maps or Tiles (large files), and Vector Maps (small files).
Don't forget to star ⭐️ this repository |
Caution
Do not use in production (Experimental features).
![]() |
![]() |
![]() |
![]() |
![]() |
---|---|---|---|---|
Splash Screen | Search Satellite | Compass | Rendered Map | Vectorized Map |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
---|---|---|---|---|---|
Satellite Info | Settings | Compass Calibration | Touch Calibration | Map Settings | Device Settings |
Currently, IceNav works with the following hardware setups and specs
Highly recommended an ESP32 with PSRAM
Important
Please review the platformio.ini file to choose the appropriate environment as well as the different build flags for your correct setup.
FLASH | PSRAM | Environment | |
---|---|---|---|
ESP32 | 16M | 4M | [env:ESP32_N16R4] |
ESP32S3 | 16M | 8M | [env:ESP32S3_N16R8] |
MAKERFAB ESP32S3 | 16M | 2M | [env:MAKERF_ESP32S3] |
Driver 1 | Resolution | SPI | 8bit | 16bit | Touch | Build Flags 2 |
---|---|---|---|---|---|---|
ILI9488 3 | 320x480 | yes | --- | --- | XPT2046 | -D ILI9488_XPT2046_SPI = 1 |
ILI9488 | 320x480 | yes | --- | --- | FT5x06 | -D ILI9488_FT5x06_SPI = 1 |
ILI9488 | 320x480 | --- | --- | yes | FT5x06 | -D ILI9488_FT5x06_16B = 1 |
ILI9341 | 320x240 | yes | --- | --- | XPT2046 | -D ILI9341_XPT2046_SPI = 1 |
If TFT shares SPI bus with SD card add the following Build Flag to platformio.ini
-D SPI_SHARED = 1
Type | Build Flags 2 | lib_deps 4 (no common environment) | |
---|---|---|---|
AT6558D | GPS | -D AT6558D_GPS = 1 |
|
HMC5883L | Compass | -D HMC5883L = 1 |
adafruit/Adafruit Unified Sensor@^1.1.14 adafruit/Adafruit BusIO@^1.16.1 adafruit/Adafruit HMC5883 Unified@^1.2.3 |
MPU9250 | IMU (Compass) | -D IMU_MPU9250 = 1 |
bolderflight/Bolder Flight Systems MPU9250@^1.0.2 |
BME280 | Temp/Pres/Hum | -D BME280 = 1 |
adafruit/Adafruit Unified Sensor@^1.1.14 adafruit/Adafruit BusIO@^1.16.1 adafruit/Adafruit BME280 Library@^2.2.4 |
Other setups like another sensors types, etc... not listed in the specs, now They are not included
If you wish to add any other type of sensor, module, etc., you can create a PR without any problem, and we will try to implement it. Thank you!
See hal.hpp for pinouts configuration
Using Maperitive select your zone and generate your tiles. For that enter to MAP-> Set Geometry bounds
draw or expand the square of your zone and run the command generate-tiles minzoom=6 maxzoom=17
, It could takes long time, maybe 1 hour or more depending your area.
After that, copy the contents of directory Tiles
into your SD in a directory called MAP
.
On SD Card map tiles (256x256 PNG Format) should be stored, in these folders structure:
[ MAP ]
|________ [ zoom folder (number) ]
|__________________ [ tile X folder (number) ]
|_______________________ tile Y file.png
Using OSM_Extract you can generate binary map files to later create vector maps. Once generated, these files should be saved in the mymap
folder on the SD card.
The PBF files can be downloaded from the geofabrik website.
The PBF files should be saved in the pbf
directory. Once saved, you should select the region or boundaries for which the GeoJSON files will be generated.
To obtain the boundaries, please check the geojson.io website.
For generate GeoJSON files run inside maps
directory:
ogr2ogr -t_srs EPSG:3857 -spat min_lon min_lat max_lon max_lat map_lines.geojson /pbf/downloaded.pbf lines
ogr2ogr -t_srs EPSG:3857 -spat min_lon min_lat max_lon max_lat map_polygons.geojson /pbf/downloaded.pbf multipolygons
For generate binary map files run inside maps
directory.
/scripts/./extract_features.py min_lon min_lat max_lon max_lat map
Once the process is completed, the maps will be inside the maps/mymap
directory. Copy all folders to the SD card except the test_imgs
directory.
Please follow the instructions provided by OSM_Extract for any further questions.
Important
Please install first PlatformIO open source ecosystem for IoT development compatible with Arduino IDE and its command line tools (Windows, MacOs and Linux). Also, you may need to install git in your system.
For ESP32 board run:
pio run --target upload
For ESP32S3 Makerfab board:
pio run -e MAKERF_ESP32S3 --target upload
For Other boards:
pio run -e environment --target upload
After the first run, load the icons and assets with:
pio run --target uploadfs
Tip
Optional, for map debugging version with specific coordinates, build and install the firmware with the next environment variables, like this:
export ICENAV3_LAT=52.5200
export ICENAV3_LON=13.4049
pio run --target upload
Note
For production version don't forget unset these environment variables.
IceNav has a basic CLI accessible via Serial and optionally via Telnet if enabled. When you access the CLI and type help
, you should see the following commands:
clear: clear shell
info: get device information
nmcli: network manager CLI.
reboot: perform a ESP32 reboot
scshot: screenshot to SD or sending a PC
Some extra details:
nmcli: IceNav use a wcli
network manager library. For more details of this command and its sub commands please refer to here
schot: This utility can save a screenshot to the root of your SD, with the name: screenshot.raw
. You can convert it to png using the convert.py
script in the tools
folder.
Additionally, this screenshot command can send the screenshot over WiFi using the following syntax:
scshot 192.168.1.10 8123
Ensure your PC has the specified port open and firewall access enabled to receive the screenshot via the netcat
command, like this:
nc -l -p 8123 > screenshot.raw
- LVGL 9 Integration
- Support other resolutions and TFT models
- Wifi CLI Manager
- LVGL Optimization
- GPX Integration
- Multiple IMU's and Compass module implementation
- Power saving
- Vector maps
- Google Maps navigation style
- Optimize code
- Fix bugs!
- Web file server
- Added support to Makerfabs ESP32-S3 Parallel TFT with Touch 3.5" ILI9488 thanks to @hpsaturn
- Improved documentation thanks to @hpsaturn
- Improved auto mainScreen selection from env variable preset thanks to @hpsaturn
- Improved getLat getLon from environment variables thanks to @hpsaturn
- 3DPrint case for an ESP32S3 Makerfabs Parallel board thanks to @hpsaturn
- Vectorial Maps routines ESP32_GPS thanks to @aresta
- OSM to binary vectorial maps OSM_Extract thanks to @aresta
- Preferences Library Easy Preferences thanks to @hpsaturn
- Wifi CLI manager esp32-wifi-cli thanks to @hpsaturn