Arduino a Bluetooth
Při svých pokusech s moduly HC-05, HC-06 a AT-09 (HM-10) pořízenými na Aliexpresu jsem se celkem dlouho potýkal s jejich nastavením pomocí AT příkazů, které se chovalo poněkud jinak, než bylo popsáno v kterékoli na internetu nalezené dokumentaci. Celkem bez potíží se mi dařilo s moduly HC-05, pořízenými v GME. Horší to ale bylo s moduly pořízenými na AliExpress, které se mi nedařilo ani párovat, ani z nich vyčíst PIN pro párování pomocí AT příkazů, kdy jsem se o to pokoušel různými způsoby, které jsem kde k podobným modulům našel.
Tento článek tedy zahrnuje popis mého potýkání, abych se měl příště kam podívat, až budu zase s těmito moduly tápat. A třeba to také pomůže i někomu jinému.
Modul AT-09 (HM-10) konečně komunikuje
Potíže jsem měl s modulem, který na povel AT+VERSION odpovídal +VERSION=v5.3. Nakonec jsem zjistil, že modul reaguje na povel AT+PIN
(V terminálu "Hercules SETUP utility" bylo třeba příkazy zadávat ve formátu AT#013#010)
| Příkaz | Odpověď | Poznámka |
| AT | OK | test spojení a AT módu |
| AT+HELP | výpis příkazů | ne všechny opravdu fungují |
| AT+VERSION | +VERSION=v5.3 | čtení verze modulu |
| AT+NAME | +NAME=BT05 | čtení názvu modulu na BLE (BT05 je výchozí název modulu) |
| AT+NAMEGT387v2 | +NAME=GT387v2 | zápis nového názvu |
| AT+PIN | +PIN=XXXXXX | čtení nastaveného PINu (z výroby nastaveno 123456) |
| AT+PINXXXXXX | +PIN=XXXXXX | zápis nového PINu |
| AT+BAUD | +BAUD=8 (def: 115200bps) | čtení nastavené kom. rychlosti |
| AT+BAUD6 | +BAUD=6 (6 = 38400bps) | zápis komunikační rychlosti |
| AT+ROLE | +ROLE=0 | čtení režimu (0=slave, 1=master) |
| AT+ROLE1 (/0) | +ROLE=1 (+ROLE=0) | zápis režimu |
| AT+POWE | +POWE=3 | Get/Set RF transmit power |
| AT+SLEEP | +SLEEP:ON (/OFF) | vyp/zap režimu spánku |
| AT+INQ | ERROR:BLE_ROLE_PERIPHERAL | hledání modulu slave (funkční v režimu master) |
| AT+UUID | +UUID=FFE0 | Get/Set system SERVER_UUID |
| AT+CHAR | +CHAR=FFE1 | Get/Set system CHAR_UUID |
| AT+RESET | OK | reset modulu (nemění nastavení) |
| AT+DEFAULT | OK | tovární nastavení modulu |
Seznam zkoušených (v módu slave), ale nefunkčních příkazů:
AT+ADDR, AT+RENEW, AT+STATE, AT+PWRM, AT+PARI, AT+STOP, AT+SHOW, AT+CONN, AT+IMME, AT+START
(AT+VERR, AT+NOTI, AT+NOT0, AT+NOT1, AT+PASS)
Modul HC-06 (klon z Ali)
Tento modul umožňuje pouze mód slave a je "na kost oškubanou" verzí i co se týká AT módu. Příkazy fungují bez zakončení CR+LF, takže na to pozor - chvíli mi trvalo, než jsem na toto přišel divíce se, proč mi ta komunikace nechce fungovat.
| Příkaz | Odpověď | Poznámka |
| AT | OK | test |
| AT+PINXXXX | OKSetPin | nastavení PINu |
| AT+NAME[StringTo20char] | OKname | nastavení jména |
| AT+BAUDX (AT+BAUD6) | OK[baud] (OK38400) | nastavení rychlosti COM |
| AT+VERSION | BT SPP V3.0 | verze modulu, FW |
Na jiné zkoušené příkazy mi modul nereagoval, i na webu jsem našel několik stránek, kde byly uvedeny jen tyto příkazy (pro základní nastavení modulu jsou ale postačující). Bohužel taky není možné pomocí příkazů zjišťovat již nastavené parametry, ale jen je přímo měnit (tedy s výjimkou AT+VERSION).
Modul HC-05 (z GME)
Testoval jsem modul pořízený v GM Elektronic, předpokládám ale, že obdobně se budou chovat i moduly z AliExpessu, a že jde patrně také o klon. Modul lze do AT módu dostat přidržením tlačítka RST při připojení k napájení (neosvědčilo se mi - viz dále), nebo připojením pinu EN na 3.3V. Trochu zvláštní bylo, že pokud jsem modul dostal do AT módu pomocí RST tlačítka, tak na některé příkazy nereagoval (ani na blbý dotaz na jméno - sic!), narozdíl od toho, pokud jsem modul dostal do AT módu signálem EN.
Modul HC-05 vyžaduje AT příkazy ukončené [CR+LF]
| Příkaz | Odpověď | Poznámka |
| AT | OK | test |
| AT+VERSION? | +VERSION:2.0-20100601 | zjištění verze modulu / FW |
| AT+PSWD | +PSWD:1234 (OK) | čtení nastaveného PINu |
| AT+PSWD=1234 | OK | nastavení PINu |
| AT+NAME / AT+NAME? | +NAME:HC-05 (OK) | čtení nastaveného jména |
| AT+NAME=[StringTo20char] | OK | nastavení jména |
| AT+UART | +UART:38400,0,0 | čtení nast. rychlosti COM |
| AT+UART=38400,0,0 | OK | nastavení rychlosti COM |
| AT+ROLE | +ROLE:0 (OK) | čtení režimu modulu (0= slave, 1= master) |
| AT+ROLE=0 | OK | nastavení režimu |
Uvádím jen část dostupných příkazů (ty, jejichž fci jsem vyzkoušel), ostatní lze dohledat v dokumentaci, tj. například zde.
Odkazy na související weby
Tento web přehledně popisuje rozdíly mezi moduly HC-05, HC-06 a AT-09:
https://blog.laskakit.cz/uart-bluetooth-moduly/
https://eggelectricunicycle.bitbucket.io/Flash_and_Debug_STM32--Flash_firmware_using_Bluetooth--ZS-040_Bluetooth_module.html
https://eggelectricunicycle.bitbucket.io/Flash_and_Debug_STM32--Flash_firmware_using_Bluetooth--ZS-040_Bluetooth_module--HC-06_hc01.comV2.0.html
https://blog.laskakit.cz/bluetooth-modul-hc-06/
https://forum.arduino.cc/t/hc06-pairing-problems/1320459/11
https://www.electronicwings.com/sensors-modules/bluetooth-module-hc-05-
https://www.instructables.com/AT-command-mode-of-HC-05-Bluetooth-module/
