ESP32 WIFI + BT (SPP)

test rapide , juste pour jouer
avec de la base simple wifi et BT(SPP)

ça semble dur à avaler par l’esp :grin:

/*
 WiFi Web Server LED Blink

 A simple web server that lets you blink an LED via the web.
 This sketch will print the IP address of your WiFi Shield (once connected)
 to the Serial monitor. From there, you can open that address in a web browser
 to turn on and off the LED on pin 5.

 If the IP address of your shield is yourAddress:
 http://yourAddress/H turns the LED on
 http://yourAddress/L turns it off

 This example is written for a network using WPA encryption. For
 WEP or WPA, change the Wifi.begin() call accordingly.

 Circuit:
 * WiFi shield attached
 * LED attached to pin 5

 created for arduino 25 Nov 2012
 by Tom Igoe

ported for sparkfun esp32 
31.01.2017 by Jan Hendrik Berlin
 
 */

#include <WiFi.h>
#include "BluetoothSerial.h"
const char* ssid     = "xyz";
const char* password = "abcd";

WiFiServer server(80);
BluetoothSerial SerialBT;
void setup()
{
    Serial.begin(115200);
    pinMode(5, OUTPUT);      // set the LED pin mode

    delay(10);
SerialBT.begin("ESP32test"); //Bluetooth device name
  Serial.println("The device started, now you can pair it with bluetooth!");
    // We start by connecting to a WiFi network

    Serial.println();
    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(ssid);

    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    Serial.println("");
    Serial.println("WiFi connected.");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
    
    server.begin();

}

int value = 0;

void loop(){
 WiFiClient client = server.available();   // listen for incoming clients

  if (client) {                             // if you get a client,
    Serial.println("New Client.");           // print a message out the serial port
    String currentLine = "";                // make a String to hold incoming data from the client
    while (client.connected()) {            // loop while the client's connected
      if (client.available()) {             // if there's bytes to read from the client,
        char c = client.read();             // read a byte, then
        Serial.write(c);                    // print it out the serial monitor
        if (c == '\n') {                    // if the byte is a newline character

          // if the current line is blank, you got two newline characters in a row.
          // that's the end of the client HTTP request, so send a response:
          if (currentLine.length() == 0) {
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();

            // the content of the HTTP response follows the header:
            client.print("Click <a href=\"/H\">here</a> to turn the LED on pin 5 on.
");
            client.print("Click <a href=\"/L\">here</a> to turn the LED on pin 5 off.
");

            // The HTTP response ends with another blank line:
            client.println();
            // break out of the while loop:
            break;
          } else {    // if you got a newline, then clear currentLine:
            currentLine = "";
          }
        } else if (c != '\r') {  // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }

        // Check to see if the client request was "GET /H" or "GET /L":
        if (currentLine.endsWith("GET /H")) {
          digitalWrite(5, HIGH);               // GET /H turns the LED on
        }
        if (currentLine.endsWith("GET /L")) {
          digitalWrite(5, LOW);                // GET /L turns the LED off
        }
        
      }
    }
    // close the connection:
    client.stop();
    Serial.println("Client Disconnected.");
    SerialBT.println("client wifi disconncted");
  }
}
Le croquis utilise 1331294 octets (101%) de l'espace de stockage de programmes. Le maximum est de 1310720 octets.

Les variables globales utilisent 65772 octets (22%) de mémoire dynamique, ce qui laisse 229140 octets pour les variables locales. Le maximum est de 294912 octets.
Croquis trop gros ; vois http://www.arduino.cc/en/Guide/Troubleshooting#size pour des conseils de réduction.
Erreur de compilation pour la carte ESP32 Dev Module

salut !

l'exemple WiFiBlueToothSwitch (dans les exemples WiFi) permet peut être de creuser le sujet de la cohabitation...
Les problèmes de cohabitation sont discités sur le forum Epressif, par exemple dans ce fil
Je retiens qu'en octobre 2017 un intervenant d'Espressif disait qu'ils étaient en train de travailler pour rendre réellement possible la coexistence WiFi-BT

C est top de partagé vos impression comme cela :slight_smile: je suis vos poste de prés
a tu essayer le re-partitionnement de ton flash pour que ton code soit avalé par l esp ?
De mon coté on a avance sur l implementation du BT cela fonctionne puis d un coup l esp crash et reboot :confused: on creuse le sujet actuellement

Le partage est l’esprit de ce forum !!
C’est avec plaisir qu’on lira votre code une fois mis au point !!

J’ai testé les 2 partitionnements alternatifs calculés et proposés auparavant ('pasdota’ et ‘minispiffs’) le premier au détriment de l’OTA, le second au détriment de l’espace dédié au SPIFFS très fortement réduit . Je les joins à nouveau en fichier zip.

Effet satisfaisant : on peut envoyer des codes qui auraient été refusés avec le partitionnement par défaut.et on choisi ce dont on se prive !!

Dans la dernière version de l 'outil ESP32/OTA on voit apparaitre :
-deux nouveaux schémas de partitionnement ('mini_spiffs’ et ‘no_ota’ )presqu’identiques aux 2 que j’avais proposé içi. (répertoire tools/partitions)
-une sélection du partitionnement dans le menu de l’IDE pour la carte ‘ESP32 Dev Module’

Voir le nouveau boards.txt pour éventuellement étendre cette fonctionnalité à d’autres cartes ESP32

partitions.zip (528 Bytes)

al1fch:
salut !

l’exemple WiFiBlueToothSwitch (dans les exemples WiFi) permet peut être de creuser le sujet de la cohabitation…
Les problèmes de cohabitation sont discités sur le forum Epressif, par exemple dans ce fil
Je retiens qu’en octobre 2017 un intervenant d’Espressif disait qu’ils étaient en train de travailler pour rendre réellement possible la coexistence WiFi-BT

oui
l’utilisation simultanée du WIFI et du BT semble etre un probleme “compliqué” chez espressif 8)

Hi, BR/EDR and WIFI coexistence performance is in optimizing on ESP32.
There’s a option in menuconfig “Software controls WiFi/Bluetooth coexistence” may do something positive impact. But there’s a known bug. We are doing the second phase to optimize the performance of Bluetooth & WIFI coexistence.

dernier test juste pour voir
en config No OTA (large app)
la compile plante (voir commentaires dans le code)

/*
    This sketch demonstrates how to scan WiFi networks.
    The API is almost the same as with the WiFi Shield library,
    the most obvious difference being the different file you need to include:
*/
#include "WiFi.h"  // passe la compile
#include "BluetoothSerial.h" // passe la compile
BluetoothSerial SerialBT; // passe la compile
void setup()
{
  Serial.begin(115200);
  SerialBT.begin("ESP32test"); // passe pas la compile
  //SerialBT.begin("ESP32test"); // passe  la compile
  // Set WiFi to station mode and disconnect from an AP if it was previously connected
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);

  Serial.println("Setup done");
}

void loop()
{
  Serial.println("scan start");

  // WiFi.scanNetworks will return the number of networks found
  int n = WiFi.scanNetworks();
  Serial.println("scan done");
  if (n == 0) {
    Serial.println("no networks found");
  } else {
    Serial.print(n);
    Serial.println(" networks found");
    for (int i = 0; i < n; ++i) {
      // Print SSID and RSSI for each network found
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(WiFi.SSID(i));
      SerialBT.println(WiFi.SSID(i)); // pour test BT SPP
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i));
      Serial.print(")");
      Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN) ? " " : "*");
      delay(10);
    }
  }
  Serial.println("");

  // Wait a bit before scanning again
  delay(5000);
}