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, kdy konečně vypsal PIN nastavený v zařízení. Tím se konečně potíže vyjasnily, protože místo čtyřmístného kódu šlo o kód šestimístný! Při dalších pokusech jsem zjišťoval, o jaký přesně modul že se jedná, protože tomu, že by šlo o HC-05 odporovala funkčnost AT režimu i při EN propojeném na GND, a naopak svědčilo by pro to zase, že modul reagoval na příkaz AT+ROLE (kdy vypíše +ROLE=0). Nakonec jsem došel k tomu, že jde o klon zcela jiného modulu a to HM-10. Jeho AT příkazy ale stejně jsou poněkud unikátní (neodpovídají specifikaci originálu).

(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/