ESP32 iOptron SmartEQ Controller
Bluetooth ⇄ RS-232 bridge · LX200 / NexStar translation · status TFT · automatic GPS time & site sync · SD-card sky catalog with GoTo & tracking
firmware: loading…
How to flash
- Plug the board into your computer with a USB-C data cable.
- Click Connect & Flash and pick the
USB-SERIAL CH340port. - The CH340 auto-reset circuit drops the ESP32 into its bootloader on its own — no button holding needed. Wait for it to finish and reboot.
- On first install, choose Erase device if offered (clears any old Bluetooth pairing / NVS).
After flashing: pair SmartEQ-RJ9 from your phone / PC (see Bluetooth & Stellarium) and open the serial port it creates at 9600 8-N-1. Updating from an older version? Remove “SmartEQ-RJ9” from your phone / PC's Bluetooth devices first, then pair again.
Bluetooth & Stellarium
The controller works like a plain serial Bluetooth module: always visible, pairs without a code, nothing to press on the controller. Anyone in Bluetooth range can connect; one device at a time. Pairings are remembered across reboots and updates.
Pair a phone or PC
- Android, Stellarium Mobile: tap Select in the telescope panel, wait for the scan, pick SmartEQ-RJ9 and tap Pair. Other apps: add SmartEQ-RJ9 in Android's Bluetooth settings.
- Windows: Settings → Bluetooth & devices → Add device → Bluetooth → SmartEQ-RJ9 — “Your device is ready to go”, no code.
“Connection to service failed” on Android? The phone remembers an old pairing the controller no longer has, and Android hides its Pair prompt in a notification. Tap Select to scan again, pick SmartEQ-RJ9 and tap Pair.
The controller's Bluetooth screen lists paired devices — select one twice to forget it. Windows creates two COM ports per pairing: use the Outgoing one (Settings → Bluetooth & devices → More Bluetooth settings → COM Ports). The Incoming port hangs any program that opens it (Stellarium shows “Not Responding”). The numbers can change each time you pair again — check this tab after re-pairing.
Protocol — LX200 / NexStar translation
The mount speaks the iOptron command language, which most apps have no built-in driver for. The controller can translate: Menu → Bluetooth → Protocol (BOOT cycles it; the setting is saved).
| Protocol | Use with |
|---|---|
| iOptron (default) | byte-transparent — iOptron Commander, ASCOM iOptron driver |
| LX200 | Stellarium Meade LX200 (compatible), SkySafari Meade LX-200 Classic, INDI LX200 Basic, ASCOM Meade Generic |
| NexStar | Stellarium Celestron NexStar (compatible), SkySafari Celestron NexStar / Advanced GT, INDI Celestron NexStar |
Translated: position, GoTo, sync, stop, slewing status, manual moves and rates,
tracking on/off, park (→ zero position), time and site. Time and site sent by the app are
written to the mount while the GPS has no fix (indoors, cold start); with a fix the GPS
stays in charge. Half-hour zones such as India's +5:30 are kept correct even though NexStar
apps send whole hours. While an LX200 / NexStar app is connected the GPS sync still runs.
After every GoTo the controller makes sure the mount is tracking. The status header shows the active
protocol (e.g. MOUNT OK LX200).
Stellarium — direct (recommended)
- On the controller set Protocol: NexStar (or LX200).
- Stellarium → Telescope Control (Ctrl+0) → Configure telescopes → + → Stellarium, directly through a serial port.
- Name it, coordinate system JNow, tick Start/connect at startup. Serial port: the
Outgoing Bluetooth COM port (the box is editable — type e.g.
COM16) · device model Celestron NexStar (compatible) (or Meade LX200 (compatible) for Protocol LX200). - OK → Start: the status turns Connected.
- Select an object (F3 to search) and press Ctrl+1 to slew, or Current object → Slew in the slew window (Ctrl+3 sync, Ctrl+5 abort).
Stellarium's NexStar driver has no sync; LX200 has. Stellarium Mobile on Android: tested with Protocol NexStar — pick a Celestron NexStar telescope over Bluetooth → SmartEQ-RJ9 (GoTo, direction buttons and stop work; turn on the Time / Location Sync switches to set the mount from the phone — it then shows Time: correct). SkySafari on Android: Settings → Telescope → Setup, scope type as in the table, mount Equatorial GoTo (German), connect via Bluetooth. iPhones can't use Classic Bluetooth serial ports.
Stellarium via ASCOM (Protocol: iOptron)
- Install the ASCOM Platform and iOptron Commander 2014 (driver “iOptron CEM60, iEQ45Pro/30Pro, CEM25, SmartEQ Pro+…”).
- Start Commander once, pick the Outgoing Bluetooth COM port, connect, close.
- Stellarium → Telescope Control (Ctrl+0) → add: ASCOM, that iOptron driver, equinox JNow, connect at startup.
- Select an object and press Ctrl+1 to slew (Ctrl+3 sync, Ctrl+5 abort).
If the controller restarts while connected, close Stellarium (and iOptron Commander) and start Stellarium again — Windows doesn't reopen the Bluetooth link on its own. In this mode, after Go to zero position the mount stops tracking and a Stellarium GoTo won't restart it: abort, then turn tracking on in Commander (the LX200 / NexStar modes handle this automatically).
SD card — sky catalog & GoTo
Put this on a micro-SD card, insert it in the display module's slot and the controller gains an object browser: pick a target, read what it is and how to image it, then TRACK — the mount slews there and keeps tracking.
Messier objects, bright stars, planets & the Moon.
Option A — flash the image
- Download smarteq-sd.img.zip (no need to unzip).
- Open balenaEtcher (or Rufus), choose the zip, select your SD card, and flash. Everything on the card is erased.
- The card shows up as a 64 MB drive named
SMARTEQ; the rest of a larger card stays unused.
Option B — copy the files
- Format the card as FAT32.
- Unzip smarteq-sd-files.zip to the card's root so it contains a
SMARTEQfolder.
Using it
| Button | Action |
|---|---|
| A | up (hold = fast scroll) · previous object |
| B | down (hold = fast scroll) · next object |
| BOOT | select / open / TRACK (press again to confirm) |
| BOOT held | back · cancel an armed TRACK |
| any button while slewing | stop the mount |
TRACK is only enabled for objects at least 10° above the horizon and 15° away from the Sun. GoTo is disabled while a Bluetooth app is connected. The menu also has Sync GPS now, Stop mount, Go to zero position (select twice to confirm), Time zone (Auto from GPS, or A/B in 15-minute steps), Bluetooth (client protocol, list / forget paired devices), Factory reset (select twice: forgets paired devices and settings, then reboots) and Debug log (live log output on the screen; A / B scroll, BOOT = live). Don't hold BOOT while powering on or resetting.
Credits: catalog from OpenNGC (CC-BY-SA-4.0) and SIMBAD/CDS; deep-sky images from DSS2 (STScI) via CDS hips2fits; planet images NASA/JPL/ESA (public domain), Moon by Gregory H. Revera (CC-BY-SA-3.0).
What gets written
| Offset | Region |
|---|---|
0x1000 | 2nd-stage bootloader |
0x8000 | partition table (huge_app, 3 MB app / no OTA) |
0xe000 | boot_app0 |
0x10000 | application |
All four are combined into
smarteq-rj9-merged.bin
(flash to 0x0), rebuilt on every pio run.
Prefer the command line?
pio run -t upload # from the platformio/ folder # or, with just the merged image + esptool: esptool.py --chip esp32 write_flash 0x0 smarteq-rj9-merged.bin
Source & docs: github.com/aviralverma-8877/esp32-ioptron_smart_eq_controller