venerdì 17 agosto 2018

ESP 32 Bluetooth Beacon

Avevo gia' comprato da diverso tempo una scheda da sviluppo di ESP32 (ESP-VROOM-32) ma non avevo avuto modo di trovarle un utilizzo serio.
Adesso l'ho tirata fuori per creare una sorta di beacon bluetooth programmabile. In pratica il sistema deve consumare il meno possibile (e quindi deve utilizzare lo sleep mode del processore) fino a quando viene premuto un pulsante; fino a che il pulsante e' mantenuto premuto deve attivarsi il bluetooth, al momento del rilascio del pulsante il dispositivo deve segnalare per 10 secondi che si sta spengendo (o meno che sta andando in sleep mode) e poi deve addormentarsi



Il pinout della scheda e' il seguente


Per poter programmare la scheda con Arduino IDE (su Mac) si deve eseguire il seguente comando

mkdir -p ~/Documents/Arduino/hardware/espressif && \
cd ~/Documents/Arduino/hardware/espressif && \
git clone https://github.com/espressif/arduino-esp32.git esp32 && \
cd esp32 && \
git submodule update --init --recursive && \
cd tools && \
python get.py
Si devono installare i driver USB to UART VCP scaricabili da qui


Queste le impostazione dell'Arduino IDE. E' consigliato di usare una Flash Frequency di 40 MHz ed una Upload Speed di 115200

Ho trovato un problema (che a quanto pare e' piuttosto comune) ovvero che non sempre e' possibile caricare lo sketch via Arduino sul modulo ESP a causa dell'errore


Timed out waiting for packet header
Non so quale e' la soluzione...a forza di provare, premendo i tasti boot e reset, la scheda ritorna a funzionare




----------------------------------
#include "SimpleBLE.h"
SimpleBLE ble;

const int buttonPin = 14;    
int buttonState = 0;     
int prevState = 0;   

void setup() {
  Serial.begin(115200);

  pinMode(buttonPin, INPUT);
  Serial.println("Start");

  esp_sleep_enable_ext0_wakeup(GPIO_NUM_14,1); //1 = High, 0 = Low
  

}

void loop() {
  buttonState = digitalRead(buttonPin);

  if ((buttonState == HIGH)  && (prevState == 0)) {
    Serial.println("Start BLE");
    prevState = 1;
    ble.begin("ESP32");
  }

  if ((buttonState == LOW)  && (prevState == 1)) {
    Serial.println("Stop BLE");
    ble.end();
    delay(2000);
    ble.begin("ESP32 OFF");
    delay(10000);
    ble.end();
    Serial.println("Sleep Mode");
    delay(1000);
    prevState = 0,
    esp_deep_sleep_start();
  }
----------------------------------

Nessun commento:

Posta un commento