Files
hexapod-robot/2026-current/remote/NEXTION.md
T
mangavalkandClaude Opus 5.5 935526eab5 Firmware simulation, Unity project, and sim-verified robot fixes
Simulation
- sim/: the unchanged robot firmware compiled into hexapod_sim.dll
  against PC stand-ins (Arduino, Servo, Wire + register-level MPU6050,
  RF24 with matching-config radio), a kinematic body model (support
  plane + planted-foot odometry) that also drives the simulated IMU,
  and a headless smoke test (sim_smoke). build.ps1 builds and tests.
- Hexapod_Simulation_Unity/ folded in (history kept in a bundle
  outside the repo). Assets/HexapodSim loads the DLL, drives the
  existing leg rig, and offers joystick / keyboard / robot-serial
  input plus a test panel.

Robot (all found or confirmed in the simulation)
- Config.h geometry taken from the Unity model.
- IK femur elevation sign, gait stance direction, body pose
  rotation direction, yaw lever arm.
- Stance feet integrated from the current command; gait restarts at
  mid-stance; heading integrates the applied turn rate, only while
  walking.
- Leg clearance and reach checks (Limits::feetFeasible); walk command
  and body pose scaled as a whole, pose scale rate-limited, planted
  feet guarded so the body never snaps or legs collide.
- Robot-gyro self-leveling as an integrator.
- Heading mode: steering relative to the body; S walks backward.
- Standing height from the remote (STANCE_HEIGHT_RANGE_MM).

Protocol v3 (reflash both boards)
- CmdPacket gains body_height (22 bytes).

Remote
- Height slider (Nextion hHeight/nHeight, serial [ ]).
- Fixed unspecified I2C read order in RemoteIMU.

LEGACY/: owner's old Nextion HMI and remote hardware assets.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 00:37:12 +02:00

4.7 KiB
Raw Blame History

Nextion HMI build guide

The owner's earlier 6-page HMI is in LEGACY/remote/remote.HMI. This guide describes the minimal single page the current firmware expects. To reuse the old HMI instead, NextionUI has to be changed to match its component names.

The firmware drives the display by component name, and the display talks back with small custom frames sent from each button's touch event. Build one page in Nextion Editor to match the tables below. Layout, fonts and colors are up to you. The names and event code must match exactly.

The remote is authoritative. Use plain Button components (not Dual-state buttons) and don't toggle anything locally in the HMI. The remote repaints every label and color from its own state, including a full redraw every 2 s and whenever the display reboots.

Program.s / page setup

In Program.s, before page 0, add:

bauds=115200

This sets the display to the NEXTION_BAUD in remote/Config.h. The display ships at 9600, and bauds= persists across power cycles.

Name the page main (page 0). The firmware never changes pages.

Components

Text components need txt_maxl at least as large as the longest string the firmware writes. Button bounds here allow some slack.

Name Type txt_maxl Firmware writes
bArm Button 10 ARMED / DISARMED, bco red / gray
bKill Button – nothing (static "DISARM" label, make it red)
bStand Button 6 STAND / SIT, bco green / gray
bGait Button 8 TRIPOD / WAVE
bMode Button 8 DIRECT / HEADING
bRs Button 10 R: ROTATE / R: MOVE
bRGyro Button – bco green / gray (label it "REMOTE GYRO")
bBGyro Button – bco green / gray (label it "ROBOT GYRO")
hSpeed Slider – val 0..255 (set maxval = 255)
nSpeed Number – val 0..100 (speed %)
hHeight Slider – val 0..200, 100 = default (set maxval = 200)
nHeight Number – val -100..100 (height offset %)
bCal Button 9 CAL / SAVE CAL, bco orange while active
bCalX Button – nothing (static "CANCEL CAL")
bZero Button – nothing (static "LEVEL")
tLink Text 10 LINK 97% / NO LINK, pco green / red
tMsg Text 40 status / rejection messages

Touch events

Put this in each component's Touch Release Event (the Speed slider uses Touch Move as well so the value tracks your finger). Frame format: '#' (0x23), length, command byte, optional value byte.

Component Event code Command
bArm printh 23 01 41 A toggle arm (needs sticks centered)
bKill printh 23 01 4B K disarm, always accepted
bStand printh 23 01 53 S toggle sit/stand
bGait printh 23 01 47 G tripod ↔ wave
bMode printh 23 01 4D M direct ↔ heading-hold
bRs printh 23 01 58 X right stick rotate ↔ translate
bRGyro printh 23 01 52 R remote-gyro tilt on/off
bBGyro printh 23 01 42 B robot self-stabilize on/off
hSpeed printh 23 02 56
prints hSpeed.val,1
V + speed byte
hHeight printh 23 02 48
prints hHeight.val,1
H + height byte (Touch Move + Release)
bZero printh 23 01 5A Z zero handset level
bCal printh 23 01 43 C start / save stick calibration
bCalX printh 23 01 51 Q cancel calibration

Uncheck "Send Component ID" on every component. The firmware ignores standard touch frames, and they only add serial traffic.

Protocol details and the parser live in NextionUI.h/.cpp. To add a control, pick an unused command byte, add it to NextionUI::decodeCustom() and UiCmd, handle it in RemoteState::handle(), and add a row here.