Modbus RTU Registry - GEOSNAKE C6 Firmware
📡 Přehled komunikace
- Protokol: Modbus RTU
- Rychlost: 9600, 19200, 38400, 57600, 115200 bps (nastavitelné)
- Formát: 8 dat, 1 stop, bez parity
- Slave ID: 1-247 (nastavitelné, výchozí: 1)
- Podporované funkce: FC03 (Read Holding Registers), FC06 (Write Single Register), FC05 (Write Single Coil)
🔢 Formát dat se znaménkem (signed values)
Mnoho registrů obsahuje záporné hodnoty (teplota, akcelerace, magnetické pole, úhly). Tyto hodnoty jsou uloženy ve formátu two's complement:
Signed 32-bit hodnoty (2 registry)
Většina měřených hodnot (akcelerace, magnetické pole, úhly) je uložena jako signed int32 rozdělená do 2 registrů:
- High word (horních 16 bitů): první registr
- Low word (dolních 16 bitů): druhý registr
Rekonstrukce signed int32:
FUNCTION read_signed_int32(high_reg, low_reg):
value = (high_reg << 16) | low_reg
// Konverze na signed (two's complement)
IF value > 0x7FFFFFFF THEN // pokud je bit 31 = 1 (záporné číslo)
value = value - 0x100000000
END IF
RETURN value
END FUNCTION
Příklad:
- high=0xFFFF, low=0xFFFE → 0xFFFFFFFE → -2 (signed)
- high=0x0000, low=0x0064 → 0x00000064 → +100 (signed)
Signed 16-bit hodnoty (1 registr)
Některé hodnoty (např. teplota 0x066E) jsou signed int16 v jednom registru:
Konverze signed int16:
FUNCTION read_signed_int16(reg):
IF reg > 32767 THEN // pokud je bit 15 = 1 (záporné číslo)
RETURN reg - 65536
END IF
RETURN reg
END FUNCTION
Příklad:
- 0x09F6 (2550) → +2550 → +25.50°C (děleno 100)
- 0xFBFF (64511) → -1025 → -10.25°C (děleno 100)
🗺️ Mapa registrů
📊 Základní registry (0x0000-0x000F)
| Adresa | Registr | Popis | Typ | R/W |
|---|---|---|---|---|
| 0x0000 | Status | Status registr | uint16 | R |
| 0x0001 | FW Version | Verze firmware | uint16 | R |
| 0x0002 | HW Version | Verze hardware | uint16 | R |
🔧 Alternativní baudrate a adresa (0x0080-0x0082)
| Adresa | Registr | Popis | Typ | R/W | Jednotka |
|---|---|---|---|---|---|
| 0x0080 | Baudrate High | Baudrate vysoký word (32-bit baudrate) | uint16 | R/W | bps |
| 0x0081 | Baudrate Low | Baudrate nízký word (32-bit baudrate) | uint16 | R/W | bps |
| 0x0082 | Device Address | Modbus adresa zařízení (alternativní) | uint16 | R/W | 1-255 |
Poznámka: Registry 0x0080-0x0082 jsou alternativní způsob nastavení baudrate a adresy. Baudrate je uložen jako 32-bit hodnota rozdělená do 2 registrů. Podporované hodnoty: 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600 bps.
📊 ADXL355 Akcelerometr
⚙️ Konfigurace ADXL355 (0x0600-0x0603)
| Adresa | Registr | Popis | Typ | R/W | Jednotka |
|---|---|---|---|---|---|
| 0x0600 | ADXL Status | Status měření ADXL355 | uint16 | R/W | 0=idle, 1=start, 2=done |
| 0x0601 | ADXL Points | Počet vzorků pro měření | uint16 | R/W | 24-1024 |
| 0x0602 | ADXL Range | Rozsah akcelerometru | uint16 | R/W | 0=±2g, 1=±4g, 2=±8g |
| 0x0603 | ADXL ODR | Output Data Rate | uint16 | R/W | Hz |
| 0x0609 | ADXL Temp Raw | Surová teplota ADXL355 | uint16 | R | raw ADC |
Vysvětlení parametrů ADXL355
ADXL Status (0x0600):
0= Idle - žádné měření neprobíhá1= Start - spustí nové měření2= Done - měření dokončeno, data jsou k dispozici
ADXL Points (0x0601):
- Počet vzorků pro statistické zpracování (průměr, minimum, maximum)
- Rozsah: 24-1024 vzorků
- Více vzorků = přesnější výsledky, ale delší měření
- Typická hodnota: 100-500 vzorků
ADXL Range (0x0602):
0= ±2g - nejvyšší přesnost, pro malé akcelerace1= ±4g - střední rozsah2= ±8g - největší rozsah, pro velké akcelerace- Důležité: Rozsah ovlivňuje přepočet RAW hodnot (viz níže)
ADXL ODR (0x0603) - Output Data Rate:
- Vzorkovací frekvence senzoru v Hz
- Vyšší ODR = rychlejší měření, ale vyšší šum
- Nižší ODR = pomalejší měření, ale nižší šum
- Typické hodnoty: 125, 250, 500, 1000, 2000, 4000 Hz
ADXL Temp Raw (0x0609):
- Surová hodnota z teplotního ADC senzoru ADXL355
- Vzorec přepočtu:
Temp_°C = (RAW - 1852) / (-9.05) - Příklad: RAW = 1852 → 0°C, RAW = 1942 → -10°C, RAW = 1762 → +10°C
- Pro přesnější teplotu použijte registr 0x066E (již přepočítaný na °C s rozlišením 0.01°C)
📊 Data ADXL355 - Průměr (0x060A-0x060F)
| Adresa | Registr | Popis | Typ | R/W | Jednotka |
|---|---|---|---|---|---|
| 0x060A | ADXL Avg X High | Průměr X-osa (vysoký byte) | int32_h | R | raw |
| 0x060B | ADXL Avg X Low | Průměr X-osa (nízký byte) | int32_l | R | raw |
| 0x060C | ADXL Avg Y High | Průměr Y-osa (vysoký byte) | int32_h | R | raw |
| 0x060D | ADXL Avg Y Low | Průměr Y-osa (nízký byte) | int32_l | R | raw |
| 0x060E | ADXL Avg Z High | Průměr Z-osa (vysoký byte) | int32_h | R | raw |
| 0x060F | ADXL Avg Z Low | Průměr Z-osa (nízký byte) | int32_l | R | raw |
Přepočet RAW hodnot ADXL355 na jednotky g
Signed hodnoty: Každá osa je uložena jako signed int32 v 2 registrech. Viz sekce "Formát dat se znaménkem".
Přepočet závisí na nastaveném rozsahu (registr 0x0602):
// Nejprve přečtěte rozsah z registru 0x0602
range = READ_HOLDING_REGISTER(address=0x0602, slave_id=1)
// Potom přečtěte RAW hodnotu (signed int32 ze 2 registrů)
raw_value = read_signed_int32(high_reg, low_reg)
// Přepočet podle rozsahu:
IF range == 0 THEN // ±2g rozsah
g = raw_value × 3.9e-6
ELSE IF range == 1 THEN // ±4g rozsah
g = raw_value × 7.8e-6
ELSE IF range == 2 THEN // ±8g rozsah
g = raw_value × 15.6e-6
END IF
Příklad výpočtu:
- Range = 0 (±2g), RAW = 256410 → g = 256410 × 3.9e-6 = 1.00g
- Range = 1 (±4g), RAW = 256410 → g = 256410 × 7.8e-6 = 2.00g
- Range = 2 (±8g), RAW = -128205 → g = -128205 × 15.6e-6 = -2.00g
Vztah mezi rozsahem a rozlišením:
- ±2g: 1 LSB = 3.9 µg (nejvyšší rozlišení)
- ±4g: 1 LSB = 7.8 µg
- ±8g: 1 LSB = 15.6 µg (nejnižší rozlišení)
📉 Data ADXL355 - Minimum (0x0610-0x0615)
| Adresa | Registr | Popis | Typ | R/W | Jednotka |
|---|---|---|---|---|---|
| 0x0610 | ADXL Min X High | Minimum X-osa (vysoký byte) | int32_h | R | raw |
| 0x0611 | ADXL Min X Low | Minimum X-osa (nízký byte) | int32_l | R | raw |
| 0x0612 | ADXL Min Y High | Minimum Y-osa (vysoký byte) | int32_h | R | raw |
| 0x0613 | ADXL Min Y Low | Minimum Y-osa (nízký byte) | int32_l | R | raw |
| 0x0614 | ADXL Min Z High | Minimum Z-osa (vysoký byte) | int32_h | R | raw |
| 0x0615 | ADXL Min Z Low | Minimum Z-osa (nízký byte) | int32_l | R | raw |
Signed hodnoty: Viz sekce "Formát dat se znaménkem". Přepočet: Viz sekce "Přepočet RAW hodnot ADXL355 na jednotky g" výše - přepočet závisí na rozsahu (0x0602)
📈 Data ADXL355 - Maximum (0x0616-0x061B)
| Adresa | Registr | Popis | Typ | R/W | Jednotka |
|---|---|---|---|---|---|
| 0x0616 | ADXL Max X High | Maximum X-osa (vysoký byte) | int32_h | R | raw |
| 0x0617 | ADXL Max X Low | Maximum X-osa (nízký byte) | int32_l | R | raw |
| 0x0618 | ADXL Max Y High | Maximum Y-osa (vysoký byte) | int32_h | R | raw |
| 0x0619 | ADXL Max Y Low | Maximum Y-osa (nízký byte) | int32_l | R | raw |
| 0x061A | ADXL Max Z High | Maximum Z-osa (vysoký byte) | int32_h | R | raw |
| 0x061B | ADXL Max Z Low | Maximum Z-osa (nízký byte) | int32_l | R | raw |
Signed hodnoty: Viz sekce "Formát dat se znaménkem". Přepočet: Viz sekce "Přepočet RAW hodnot ADXL355 na jednotky g" výše - přepočet závisí na rozsahu (0x0602)
🧲 MLX90393 Magnetometr
⚙️ Konfigurace MLX90393 (0x0604-0x0605, 0x0630-0x0632)
| Adresa | Registr | Popis | Typ | R/W | Jednotka |
|---|---|---|---|---|---|
| 0x0604 | MLX Status | Status měření MLX90393 | uint16 | R/W | 0=idle, 1=start, 2=done |
| 0x0605 | MLX Points | Počet vzorků pro MLX měření | uint16 | R/W | 1-1024 |
| 0x0630 | MLX Gain | Zesílení senzoru | uint16 | R/W | 0-7 |
| 0x0631 | MLX OSR | Oversampling | uint16 | R/W | 0-3 |
| 0x0632 | MLX Filter | Digitální filtr | uint16 | R/W | 0-7 |
Vysvětlení parametrů MLX90393
MLX Status (0x0604):
0= Idle - žádné měření neprobíhá1= Start - spustí nové měření2= Done - měření dokončeno, data jsou k dispozici
MLX Points (0x0605):
- Počet vzorků pro statistické zpracování (průměr)
- Rozsah: 1-1024 vzorků
- Více vzorků = přesnější výsledky, ale delší měření
- Typická hodnota: 10-100 vzorků
MLX Gain (0x0630) - Zesílení:
0= 1.0x (výchozí zesílení)1= 1.33x2= 1.67x3= 2.0x4= 2.5x5= 3.0x6= 4.0x7= 5.0x- Vyšší zesílení = vyšší citlivost pro slabá magnetická pole
- Nižší zesílení = větší rozsah měření, méně saturace
MLX OSR (0x0631) - Oversampling Ratio:
0= OSR_0 (nejrychlejší měření, nejvyšší šum)1= OSR_12= OSR_23= OSR_3 (nejpomalejší měření, nejnižší šum)- Vyšší OSR = lepší poměr signál/šum, ale pomalejší měření
MLX Filter (0x0632) - Digitální filtr:
0= FILTER_0 (žádné filtrování)1= FILTER_12= FILTER_23= FILTER_34= FILTER_45= FILTER_5 (výchozí)6= FILTER_67= FILTER_7 (maximální filtrování)- Vyšší filtr = plynulejší data, ale pomalejší odezva na změny
🧲 Data MLX90393 - Průměr (0x061C-0x0621)
| Adresa | Registr | Popis | Typ | R/W | Jednotka |
|---|---|---|---|---|---|
| 0x061C | MLX Avg X High | Průměr X-osa (vysoký byte) | int32_h | R | µT |
| 0x061D | MLX Avg X Low | Průměr X-osa (nízký byte) | int32_l | R | µT |
| 0x061E | MLX Avg Y High | Průměr Y-osa (vysoký byte) | int32_h | R | µT |
| 0x061F | MLX Avg Y Low | Průměr Y-osa (nízký byte) | int32_l | R | µT |
| 0x0620 | MLX Avg Z High | Průměr Z-osa (vysoký byte) | int32_h | R | µT |
| 0x0621 | MLX Avg Z Low | Průměr Z-osa (nízký byte) | int32_l | R | µT |
Signed hodnoty: Každá osa je uložena jako signed int32 v 2 registrech. Viz sekce "Formát dat se znaménkem". Jednotky: Hodnoty jsou přímo v µT (mikrotesla), nevyžadují další přepočet.
🔧 Systémová konfigurace
⚙️ Systémové registry (0x0622-0x0628)
| Adresa | Registr | Popis | Typ | R/W | Hodnoty |
|---|---|---|---|---|---|
| 0x0622 | Device Address | Modbus adresa zařízení | uint16 | R/W | 1-247 |
| 0x0623 | Baudrate Index | Index baudrate | uint16 | R/W | 1-5* |
| 0x0624 | WiFi Status | Stav WiFi | uint16 | R/W | 0=OFF, 1=ON |
| 0x0625 | BT Status | Stav Bluetooth | uint16 | R/W | 0=OFF, 1=ON |
| 0x0626 | Restart Trigger | Restart zařízení | uint16 | R/W | 0=NIC, 1=RESTART |
| 0x0627 | HTTP Status | Stav HTTP odesílání | uint16 | R/W | 0=OFF, 1=ON |
| 0x0628 | Debug Level | Úroveň debug výpisů | uint16 | R/W | 0-3* |
*Baudrate indexy:
- 1 = 9600 bps
- 2 = 19200 bps
- 3 = 38400 bps
- 4 = 57600 bps
- 5 = 115200 bps
*Debug úrovně:
- 0 = OFF (žádné debug zprávy)
- 1 = ERRORS (pouze chyby)
- 2 = INFO (chyby + informace)
- 3 = VERBOSE (vše včetně podrobností)
📈 ADXL355 Data násobené (0x0650-0x0661)
| Adresa | Registr | Popis | Typ | R/W | Jednotka |
|---|---|---|---|---|---|
| 0x0650 | ADXL Min Mult X High | Minimum X násobek (vysoký) | int32_h | R | - |
| 0x0651 | ADXL Min Mult X Low | Minimum X násobek (nízký) | int32_l | R | - |
| 0x0652 | ADXL Min Mult Y High | Minimum Y násobek (vysoký) | int32_h | R | - |
| 0x0653 | ADXL Min Mult Y Low | Minimum Y násobek (nízký) | int32_l | R | - |
| 0x0654 | ADXL Min Mult Z High | Minimum Z násobek (vysoký) | int32_h | R | - |
| 0x0655 | ADXL Min Mult Z Low | Minimum Z násobek (nízký) | int32_l | R | - |
| 0x0656 | ADXL Max Mult X High | Maximum X násobek (vysoký) | int32_h | R | - |
| 0x0657 | ADXL Max Mult X Low | Maximum X násobek (nízký) | int32_l | R | - |
| 0x0658 | ADXL Max Mult Y High | Maximum Y násobek (vysoký) | int32_h | R | - |
| 0x0659 | ADXL Max Mult Y Low | Maximum Y násobek (nízký) | int32_l | R | - |
| 0x065A | ADXL Max Mult Z High | Maximum Z násobek (vysoký) | int32_h | R | - |
| 0x065B | ADXL Max Mult Z Low | Maximum Z násobek (nízký) | int32_l | R | - |
| 0x065C | ADXL Avg Mult X High | Průměr X násobek (vysoký) | int32_h | R | - |
| 0x065D | ADXL Avg Mult X Low | Průměr X násobek (nízký) | int32_l | R | - |
| 0x065E | ADXL Avg Mult Y High | Průměr Y násobek (vysoký) | int32_h | R | - |
| 0x065F | ADXL Avg Mult Y Low | Průměr Y násobek (nízký) | int32_l | R | - |
| 0x0660 | ADXL Avg Mult Z High | Průměr Z násobek (vysoký) | int32_h | R | - |
| 0x0661 | ADXL Avg Mult Z Low | Průměr Z násobek (nízký) | int32_l | R | - |
Signed hodnoty: Viz sekce "Formát dat se znaménkem". Násobené hodnoty: Tyto registry obsahují hodnoty v jednotkách g vynásobené faktorem 10000000 (10 miliónů) pro vyšší přesnost při přenosu.
- Pro získání hodnoty v g:
g = signed_int32 / 10000000- Příklad: signed_int32 = 10000000 → 1.0g, signed_int32 = -5000000 → -0.5g Poznámka: Tyto hodnoty jsou již ve fyzikálních jednotkách g (ne RAW), nepotřebují přepočet podle rozsahu.
🔄 OTA Firmware Update (0x0300-0x0307, 0x0400+)
| Adresa | Registr | Popis | Typ | R/W | Hodnoty |
|---|---|---|---|---|---|
| 0x0300 | OTA Control | Ovládací příkazy | uint16 | W | 0=idle, 1=start, 3=end, 4=abort |
| 0x0301 | OTA Status | Aktuální stav | uint16 | R | 0=idle, 1=ready, 2=writing, 3=success, 4=error |
| 0x0302 | OTA Size High | Velikost FW (horní word) | uint16 | R/W | bytes |
| 0x0303 | OTA Size Low | Velikost FW (dolní word) | uint16 | R/W | bytes |
| 0x0304 | OTA Written High | Zapsáno bytů (horní word) | uint16 | R | bytes |
| 0x0305 | OTA Written Low | Zapsáno bytů (dolní word) | uint16 | R | bytes |
| 0x0306 | OTA Error Code | Kód chyby | uint16 | R | - |
| 0x0307 | OTA Chunk Size | Max velikost chunku | uint16 | R | 240 bytes |
| 0x0400+ | OTA Data | Data firmwaru (FC16) | bytes | W | Firmware chunks |
📐 Úhly ADXL355 (0x0662-0x066E)
| Adresa | Registr | Popis | Typ | R/W | Jednotka |
|---|---|---|---|---|---|
| 0x0662 | AngleX High | AngleX úhel (vysoký byte) | int32_h | R | 0.0001° |
| 0x0663 | AngleX Low | AngleX úhel (nízký byte) | int32_l | R | 0.0001° |
| 0x0664 | AngleY High | AngleY úhel (vysoký byte) | int32_h | R | 0.0001° |
| 0x0665 | AngleY Low | AngleY úhel (nízký byte) | int32_l | R | 0.0001° |
| 0x0666 | AngleZ High | AngleZ úhel (vysoký byte) | int32_h | R | 0.0001° |
| 0x0667 | AngleZ Low | AngleZ úhel (nízký byte) | int32_l | R | 0.0001° |
| 0x0668 | Pitch Calc High | Vypočítaný pitch (vysoký byte) | int32_h | R | 0.0001° |
| 0x0669 | Pitch Calc Low | Vypočítaný pitch (nízký byte) | int32_l | R | 0.0001° |
| 0x066A | Roll Calc High | Vypočítaný roll (vysoký byte) | int32_h | R | 0.0001° |
| 0x066B | Roll Calc Low | Vypočítaný roll (nízký byte) | int32_l | R | 0.0001° |
| 0x066C | Tilt Calc High | Vypočítaný tilt (vysoký byte) | int32_h | R | 0.0001° |
| 0x066D | Tilt Calc Low | Vypočítaný tilt (nízký byte) | int32_l | R | 0.0001° |
| 0x066E | Temp Celsius | Teplota ADXL355 | int16 | R | 0.01°C |
Úhly (0x0662-0x066D): Všechny úhly jsou signed int32 (2 registry). Viz sekce "Formát dat se znaménkem".
- Registry 0x0662-0x0667: Staré úhly (angleX/Y/Z)
- Registry 0x0668-0x066D: Nové vypočítané úhly (pitch/roll/tilt magnitude)
- Rozlišení: 0.0001° (dělte signed int32 hodnotou 10000)
- Příklad: signed_int32 = 450000 → 45.0000°, signed_int32 = -123456 → -12.3456°
Teplota (0x066E): Signed int16 (1 registr), rozlišení 0.01°C. Viz sekce "Formát dat se znaménkem - Signed 16-bit hodnoty".
- Příklad: 2550 → +25.50°C, -1025 → -10.25°C
🆔 Device Identifikátory (0x0700-0x070F)
| Adresa | Registr | Popis | Typ | R/W | Jednotka |
|---|---|---|---|---|---|
| 0x0700 | Chip ID [63:48] | Chip ID nejvyšší word | uint16 | R | - |
| 0x0701 | Chip ID [47:32] | Chip ID vysoký word | uint16 | R | - |
| 0x0702 | Chip ID [31:16] | Chip ID nízký word | uint16 | R | - |
| 0x0703 | Chip ID [15:0] | Chip ID nejnižší word | uint16 | R | - |
| 0x0704 | MAC [47:32] | MAC adresa vysoký word | uint16 | R | - |
| 0x0705 | MAC [31:16] | MAC adresa střední word | uint16 | R | - |
| 0x0706 | MAC [15:0] | MAC adresa nízký word | uint16 | R | - |
| 0x0707 | CPU Cores | Počet jader procesoru | uint16 | R | cores |
| 0x0708 | CPU Freq | Frekvence procesoru | uint16 | R | MHz |
| 0x0709 | Flash Size | Velikost flash paměti | uint16 | R | KB |
| 0x070A | Free Heap | Volná RAM paměť | uint16 | R | KB |
| 0x070B | Uptime High | Uptime vysoký word | uint16 | R | s |
| 0x070C | Uptime Low | Uptime nízký word | uint16 | R | s |
| 0x070D | Sketch Size | Velikost firmware | uint16 | R | KB |
| 0x070E | Free Sketch | Volné místo pro firmware | uint16 | R | KB |
| 0x070F | Chip Revision | Revize čipu ESP32-C6 | uint16 | R | - |
📡 WiFi Klientská IP adresa (0x0710-0x0713)
| Adresa | Registr | Popis | Typ | R/W | Jednotka |
|---|---|---|---|---|---|
| 0x0710 | WiFi IP [31:24] | IP adresa klienta (nejvyšší byte) | uint16 | R | - |
| 0x0711 | WiFi IP [23:16] | IP adresa klienta | uint16 | R | - |
| 0x0712 | WiFi IP [15:8] | IP adresa klienta | uint16 | R | - |
| 0x0713 | WiFi IP [7:0] | IP adresa klienta (nejnižší byte) | uint16 | R | - |
Poznámka: Pokud není zařízení připojeno k WiFi jako klient (STA nebo APSTA), registry vrací 0.
🔍 Podporované Modbus funkce
FC03 - Read Holding Registers
Čtení hodnot z registrů. Všechny registry v tabulce výše.
Příklad čtení device ID:
Request: [01] [03] [07 00] [00 04] [CRC]
ID FC ADDR COUNT CRC
Response: [01] [03] [08] [12 34] [56 78] [9A BC] [DE F0] [CRC]
ID FC BC REG1 REG2 REG3 REG4 CRC
FC06 - Write Single Register
Zápis do vybraných registrů:
| Adresa | Registr | Popis | Rozsah |
|---|---|---|---|
| 0x0080 | Baudrate High | Baudrate vysoký word | 32-bit value |
| 0x0081 | Baudrate Low | Baudrate nízký word | 32-bit value |
| 0x0082 | Address Alt | Modbus ID (alternativní) | 1-255 |
| 0x0600 | ADXL Control | Start měření ADXL355 | 0=NIC, 1=START |
| 0x0601 | ADXL Points | Počet vzorků ADXL355 | 24-1024 |
| 0x0602 | ADXL Range | Rozsah akcelerometru | 0-2 |
| 0x0603 | ADXL ODR | Output Data Rate | dle senzoru |
| 0x0604 | MLX Control | Start měření MLX90393 | 0=NIC, 1=START |
| 0x0605 | MLX Points | Počet vzorků MLX90393 | 1-1024 |
| 0x0622 | Address | Modbus ID | 1-247 |
| 0x0623 | Baudrate Index | Baudrate index | 1-5 |
| 0x0624 | WiFi | WiFi konfigurace | 0=OFF, 1=ON |
| 0x0625 | Bluetooth | Bluetooth konfigurace | 0=OFF, 1=ON |
| 0x0626 | Restart | Restart zařízení | 0=NIC, 1=RESTART |
| 0x0627 | HTTP | HTTP odesílání | 0=OFF, 1=ON |
| 0x0628 | Debug Level | Debug úroveň | 0-3 |
| 0x0630 | MLX Gain | MLX90393 zesílení | 0-7 |
| 0x0631 | MLX OSR | MLX90393 oversampling | 0-3 |
| 0x0632 | MLX Filter | MLX90393 filtr | 0-7 |
| 0x0300 | OTA Control | OTA ovládání | 0/1/3/4 |
| 0x0302 | OTA Size High | OTA velikost high | bytes |
| 0x0303 | OTA Size Low | OTA velikost low | bytes |
Příklad nastavení baudrate (index):
Request: [01] [06] [06 23] [00 05] [CRC] ; Nastavení 115200 bps (index 5)
ID FC ADDR VALUE CRC
Response: [01] [06] [06 23] [00 05] [CRC] ; Echo
Příklad start měření ADXL355:
Request: [01] [06] [06 00] [00 01] [CRC] ; Start měření
ID FC ADDR VALUE CRC
Response: [01] [06] [06 00] [00 01] [CRC] ; Echo
FC05 - Write Single Coil
Ovládání cívek (start měření):
| Adresa | Coil | Popis | Hodnoty |
|---|---|---|---|
| 0x000D | Start Measurement | Spustit měření ADXL + MLX | 0x0000=NIC, 0xFF00=START |
Příklad spuštění měření:
Request: [01] [05] [00 0D] [FF 00] [CRC] ; Spuštění měření
ID FC ADDR VALUE CRC
Response: [01] [05] [00 0D] [FF 00] [CRC] ; Echo
Poznámka: FC05 na adrese 0x0D spustí měření obou senzorů (ADXL355 i MLX90393) současně.
🔧 Řešení problémů
Typické chyby
- Neplatná adresa registru - Registr neexistuje nebo není implementován
- Timeout - Zkontrolujte baudrate a Modbus ID
- CRC chyba - Problémy s komunikačním kabelem nebo interference
- Neplatný Modbus ID - Zkontrolujte nastavení slave adresy
🔍 Diagnostika
# Test komunikace
modpoll -m rtu -b 19200 -p none -s 1 -r 1 -c 1 /dev/ttyUSB0
# Čtení device ID (4 registry)
modpoll -m rtu -b 19200 -p none -s 1 -r 0x0700 -c 4 /dev/ttyUSB0
# Čtení MAC adresy (3 registry)
modpoll -m rtu -b 19200 -p none -s 1 -r 0x0704 -c 3 /dev/ttyUSB0
# Nastavení baudrate na 115200 (přes index)
modpoll -m rtu -b 19200 -p none -s 1 -r 0x0623 -c 1 5 /dev/ttyUSB0
# Čtení debug úrovně
modpoll -m rtu -b 19200 -p none -s 1 -r 0x0628 -c 1 /dev/ttyUSB0
# Nastavení debug úrovně na VERBOSE (3)
modpoll -m rtu -b 19200 -p none -s 1 -r 0x0628 -c 1 3 /dev/ttyUSB0
# Spuštění měření ADXL355
modpoll -m rtu -b 19200 -p none -s 1 -r 0x0600 -c 1 1 /dev/ttyUSB0
# Čtení statusu měření ADXL355
modpoll -m rtu -b 19200 -p none -s 1 -r 0x0600 -c 1 /dev/ttyUSB0
# Čtení ADXL355 průměrných hodnot (6 registrů X,Y,Z)
modpoll -m rtu -b 19200 -p none -s 1 -r 0x060A -c 6 /dev/ttyUSB0
# Čtení MLX90393 průměrných hodnot (6 registrů X,Y,Z)
modpoll -m rtu -b 19200 -p none -s 1 -r 0x061C -c 6 /dev/ttyUSB0
⚠️ Bezpečnostní poznámky
- Device identifikátory jsou pouze pro čtení
- Změna baudrate vyžaduje restart komunikace (ne restart zařízení)
- Změna Modbus adresy (0x0622 nebo 0x0082) se použije okamžitě
- WiFi/BT změny vyžadují restart zařízení (registr 0x0626)
- Používejte vhodné timeout hodnoty (min. 1000ms)
- Před zápisem vždy ověřte aktuální hodnoty čtením
- Registry 0x0080-0x0082 poskytují alternativní přístup k baudrate/adrese
📋 Shrnutí hlavních adres
| Oblast | Adresa | Popis |
|---|---|---|
| Status | 0x0000-0x0002 | Status, FW, HW verze |
| Baudrate Alt | 0x0080-0x0082 | Alternativní baudrate/adresa |
| ADXL Config | 0x0600-0x0603 | Konfigurace ADXL355 |
| MLX Config | 0x0604-0x0605, 0x0630-0x0632 | Konfigurace MLX90393 |
| ADXL Data | 0x060A-0x061B | Průměr, min, max ADXL355 |
| MLX Data | 0x061C-0x0621 | Průměr MLX90393 |
| System | 0x0622-0x0628 | Adresa, baudrate, WiFi, BT, HTTP, debug |
| ADXL Mult | 0x0650-0x0661 | ADXL násobené hodnoty |
| ADXL Angles | 0x0662-0x066E | Úhly a teplota |
| Device ID | 0x0700-0x070F | Chip ID, MAC, CPU info |
| WiFi IP | 0x0710-0x0713 | Klientská IP adresa |
| OTA | 0x0300-0x0307 | OTA firmware update |