Bluetooth modul HM-10 (AT-09) a mobilní aplikace

Odpovědět
Pablo74
Příspěvky: 48
Registrován: 03 lis 2019, 17:00
Reputation: 0

Bluetooth modul HM-10 (AT-09) a mobilní aplikace

Příspěvek od Pablo74 » 04 pro 2023, 21:49

... aneb jak ovládat LED diodu přes BLE z notebooku či mobilu (Android)

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);
}
4. webová / mobilní aplikace (pro Android)
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); 
}
Moje aplikace funguje jak na notebooku, tak i na mobilu s Androidem, přitom Wemos S2 mini s modulem HM-10 není připojen USB kabelem, ale ovládání je opravdu přes BLE. Pro představu, moje aplikace vypadá takhle:
BLE HM-10 communication.png
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!

Uživatelský avatar
Caster
Příspěvky: 385
Registrován: 11 zář 2019, 09:02
Reputation: 0

Re: Bluetooth modul HM-10 (AT-09) a mobilní aplikace

Příspěvek od Caster » 05 pro 2023, 08:54

Zajímavé ;) . Pro načítání letových dat rakety budu muset naprogramovat přenos dat po ukončení letu pomocí Bluetooth do mobilu (telemetrie za letu bude později). Zatím mám funkční snímání senzoru Bosch BMI160 6DoF IMU a jejich záznam na flash pamět 8Mbit.

Musím koupit vhodný Bluetooth modul a naprogramovat aplikaci pro mobil v Android Studiu ;) .

Řízení trajektorie letu rakety Šemík budu zatím testovat do menších výšek cca 3 km, ve finále by měla vynášet satelity CubeSat do výšky 100 km 8-) . Musk to pak bude moct zabalit :D .

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 56 hostů