Pozn.: Existuje více variant či modulů vycházejících z HM-10, tento je jedním z nich. V textu o něm budu psát jako o HM-10.
Modul HM-10 (AT-09) jsem zakoupil v ČR na webu dratek.cz, konkrétně jde o tento výrobek: https://dratek.cz/arduino/1312-android- ... modul.html
Nemám ho propojen s vývojovou deskou Arduino (což je v naprosté většině tutoriálů), ale s Wemos S2 mini; v podstatě to nemá na nic vliv. Wemos S2 mini používá jednočip Espressif ESP32 ve variantě S2, programovat se dá stejně jako Arduino ve vývojovém prostředí Arduino IDE v jazyku Wiring.
1. AT příkazy
Pomocí AT příkazů se dají zjistit a nastavit důležité parametry modulu. Návodů, které popisují práci s AT příkazy existuje dost a jsou srozumitelné a jednoznačné.
Já jsem u svého modulu zjistil následující:
+PIN=123456
+ROLE=0
+BAUD=4
+POWE=3
+NAME=BT05
+VERSION=v6.3
+ADVI=0
+TYPE=0
2. propojení HM-10 s Wemos S2 mini
Zapojení je standardní přes UART sběrnici: propojí se obě země GND, přivede se napájení a zapojí se do kříže piny Rx a Tx (Rx <--> Tx, Tx <--> Rx). K napájení jen poznamenám, že ačkoli se u některých modulů uvádí rozsah 3.6 V - 6 V, tento modul funguje i při 3.3 V.
3. program běžící na Wemos S2 mini
Cílem je ovládat jednu LED diodu přes BLE z mobilu, modul HM-10 slouží jako komunikační prostředek, samotná LED je ovládána vývojovou deskou Wemos S2 mini.
Kód programu je převzat od Luboše M. z tohoto článku: https://navody.dratek.cz/navody-k-produ ... hm-10.html, jen jsem změnil číslo pinu, ke kterému je připojena LED dioda a redukoval příkazy pouze na "0" a "1", viz zdrojový kód. Po odladění kódu jsem ještě odstranil příkazy pracující s klasickým sériovým monitorem.
Všechny komentáře ve zdrojovém textu jsou původní komentáře autora.
Kód: Vybrat vše
// Arduino Bluetooth modul HM-10
// nastavení propojovacích pinů Bluetooth a LED diody
#define RX 10
#define TX 11
#define pinLED 5
// připojení knihovny SoftwareSerial
#include <SoftwareSerial.h>
// inicializace Bluetooth modulu z knihovny SoftwareSerial
SoftwareSerial bluetooth(TX, RX);
void setup() {
// zahájení komunikace s Bluetooth modulem
// skrze Softwarovou sériovou linku rychlostí 9600 baud
bluetooth.begin(9600);
bluetooth.println("Wemos S2 mini zapnuto, test Bluetooth.");
// nastavení pinu s LED diodou jako výstup
pinMode(pinLED, OUTPUT);
}
void loop() {
// proměnná pro ukládání dat z Bluetooth modulu
byte BluetoothData;
// kontrola Bluetooth komunikace, pokud je dostupná nová
// zpráva, tak nám tato funkce vrátí počet jejích znaků
if (bluetooth.available() > 0) {
// načtení prvního znaku ve frontě do proměnné
BluetoothData=bluetooth.read();
// dekódování přijatého znaku
switch (BluetoothData) {
// každý case obsahuje dekódování jednoho znaku
case '0':
// v případě přijetí znaku nuly vypneme LED diodu
// a vypíšeme hlášku zpět do Bluetooth zařízení
digitalWrite(pinLED, LOW);
bluetooth.println("Vypni LED diodu.");
break;
case '1':
// v případě přijetí jedničky zapneme LED diodu
// a vypíšeme hlášku zpět do Bluetooth zařízení
digitalWrite(pinLED, HIGH);
bluetooth.println("Zapni LED diodu.");
break;
case '\r':
// přesun na začátek řádku - znak CR
break;
case '\n':
// odřádkování - znak LF
break;
default:
// v případě přijetí ostatních znaků
// vytiskneme informaci o neznámé zprávě
bluetooth.println("Neznamy prikaz.");
}
}
// krátká pauza mezi kontrolami komunikace Bluetooth modulu
delay(100);
}
Klasikou je vytvořit si aplikaci v MIT App Inventor nebo využít ověřené jako nRF Connect nebo Serial Bluetooth Terminal.
Existuje ale i možnost napsat si svou vlastní aplikaci. Vyšel jsem z opravdu skvělého zdroje informací, kde je funkční základ, který stačí upravit k obrazu svému. Tím zdrojem je repozitář na githubu od vývojáře ErniW: https://github.com/ErniW/Web-Bluetooth- ... /tree/main
Podstatná část JS kódu aplikace je zde:
Kód: Vybrat vše
const serviceUUID = 0xFFE0;
const serialUUID = 0xFFE1;
var device;
var serialCharacteristic;
async function connect(){
device = await navigator.bluetooth.requestDevice({
filters: [{
services: [serviceUUID]
}],
});
const server = await device.gatt.connect();
const service = await server.getPrimaryService(serviceUUID);
serialCharacteristic = await service.getCharacteristic(serialUUID);
await serialCharacteristic.startNotifications();
serialCharacteristic.addEventListener('characteristicvaluechanged', read);
}
function disconnect(){
device.gatt.disconnect();
}
async function send(msg){
msg += "\n";
var buffer = new ArrayBuffer(msg.length);
var msgEncodded = new Uint8Array(buffer);
for(var i=0; i<msg.length; i++){
msgEncodded[i] = msg.charCodeAt(i);
}
await serialCharacteristic.writeValue(msgEncodded);
}
Dokud není navázáno spojení (úspěšné spárování), jsou tlačítka pro ovládání LED nefunkční (disable), po navázání spojení se původní modré tlačítko "connect..." změní na černé "disconnect..." a červené a zelené tlačítko je funkční. Nad nimi se zobrazí název zařízení, jak je vidět přes BLE, v mém případě BT05.
Aplikace je zatím jen webová stránka, ale není problém ji upravit na PWA a nainstalovat.
A víte co? Mám radost!