ATLAS AI — Travel Guide
by The Uncertified Engineer in Circuits > Microcontrollers
375 Views, 5 Favorites, 0 Comments
ATLAS AI — Travel Guide
I've always thought travel apps do too much. Maps are great for figuring out how to get somewhere, but they can be overwhelming when you just want the facts. You open Google Maps, and within three taps you're lost in reviews, ads, and booking widgets - when all you really wanted to know was what this place is famous for and when to visit.
So I built something different. Instead of a cluttered map interface, ATLAS AI takes a minimalist approach: a desktop prototype that you ask a question, and it gives you exactly the answer - nothing more, nothing less.
Travel Guide AI is an ESP32-based gadget that connects to Groq's cloud inference API, runs Meta's LLaMA-3.3-70B language model, and displays formatted travel information on a 2.4" TFT screen. You type a place name into the serial monitor, and within seconds you get a clean, card-style display showing the place's specialty, rating, highlights, best time to visit, and what it's most famous for.
No app. No phone. No subscription. Just a cheap microcontroller talking to one of the most powerful open-source AI models in the world.
Just type a place name like:
“Paris” or “Mount Fuji”
And get:
- ⭐ Rating
- 🌍 Highlights
- 📅 Best time to visit
- 🎯 What it's famous for
Supplies
How It Works
The ESP32 connects to your WiFi. Once online, you type a place name into the Serial Monitor. The firmware sends an HTTPS request to Groq's API, which runs Meta's LLaMA-3.3-70B model in the cloud. The model replies in a strict JSON format — name, specialty, rating, highlights, best time to visit, and what it's famous for. That JSON gets parsed and displayed both on the TFT screen and the Serial Monitor.
Why FreeRTOS?
Making an HTTPS API call to Groq takes 2–5 seconds. If you do that in loop(), everything freezes — including your display. The screen shows nothing while the ESP32 waits, which looks broken.
The solution: run the API call on core 0, run the animation on core 1.
a simple volatile bool g_apiDone flag is used to signal completion between cores. No mutex needed because its just flipping a boolean once.
Side Note : because of my not so good relationship with tft displays, after struggling with the code this display for a month.I used Claude ai to help architect the FreeRTOS dual-core task structure and refine the TFT drawing functions. The system prompt design, overall architecture, hardware decisions, display and serial UI, and all debugging were done by me. Instructables encourages transparency — AI is a tool, like a soldering iron. I'm disclosing it because I think it helps other makers learn what's possible, not because I'm required to.
Wiring
ESP32 Pin ---------> ILI9341 Pin
3.3V ---------> VCC
GND ---------> GND
GPIO5 ---------> RST
GPIO 16 ---------> DC
GPIO 17 ---------> CS
GPIO 18 ---------> SCK
GPIO 19 ---------> MISO
GPIO 23 ---------> MOSI
GPIO 32 ---------> LED
What You Will Need (software)
To make this run you will need groq api key.
Get a free Groq API key
- Go to console.groq.com and sign up.
- Navigate to API Keys in the sidebar.
- Click "Create New API Key."
- Give it a name and set expiry to "None."
- Copy the key and save it somewhere safe — you won't see it again.
Install Arduino IDE and the ESP32 board package
If you haven't already, install Arduino IDE and add ESP32 board support through the Boards Manager. Search for "esp32 by Espressif Systems" and install it.
Install these two libraries from the package manager.
- TFT_eSPI
- ArduinoJson
Code and Setup
Download the source code from my github (here)
Replace these with your credentials.
Replace the User_Setup.h in your arduino ide libraries, TFT_eSPI folder with this(given below).
Flash settings:
Board: ESP32 Dev Module
Upload Speed: 921600
Serial Monitor Baud: 115200
Serial Monitor line ending: Newline
Upload the code and you are done with setup, Time for testing.
Downloads
Using Atlas AI
Power on the ESP32. It will automatically connect to the WiFi you configured. Watch the Serial Monitor — it will print the connection status and the IP address once connected.
The TFT screen shows a boot animation, then displays a prompt once WiFi is ready.
In the Serial Monitor, type any place name and hit Enter:
Enter place name:
The screen shows a loading spinner while it fetches the response (2–5 seconds depending on your connection). Then it displays the travel card:
The same information appears formatted on the TFT screen.
Troubleshooting
Problems and their solutions
Blank/white screen --> Double-check User_Setup.h — wrong driver or wrong pins are the #1. cause
HTTP error -1 --> WiFi credentials wrong, or ESP32 is out of range
HTTP 401 --> Invalid or expired Groq API key
HTTP 429 --> You've hit Groq's free tier rate limit — wait a minute and try again
No response to typingSerial Monitor --> line ending must be set to "Newline"
Display works but text is garbled --> You might have the wrong font loaded — check that SMOOTH_FONT is defined in User_Setup.h
Conclusion
Yeah, this is over-engineered. An ESP32 running FreeRTOS dual-core tasks to call a 70B parameter AI model just to tell you when to visit Paris — you could technically do that by Googling for 10 seconds.
But here's the thing: that Google search opens a browser. The browser has notifications. The travel site has a popup asking you to sign up. Under the answer there's a hotel booking widget, three ads, and a "users also asked" section that leads you somewhere completely different. By the time you find what you wanted, you've lost two minutes and somehow ended up reading about flight prices.
Sometimes the over-engineered thing is actually the simpler experience. This device does one thing. It has no ads, no algorithm deciding what else to show you, no dark patterns trying to keep you scrolling. You type a place name, you get the information, you're done.
That's what I actually wanted to build — not just a cool hardware project, but something that respects your attention. The fact that it runs on a $5 microcontroller is just a bonus.