Arduino PVG32 Radiocommande

Pour alimenter l'ESP tu peux directement lui fournir du +5V, il a sa propre régulation 3.3V. En plus, il a une diode sur le 5V_USB donc ton PC et protégé.

Pour l'ADS, dans un premier temps, utilise un module tous compris, après si tu veux utiliser les composant séparés, tu pourras toujours modifier.
Pour l'adresse, il y a quatre possibilités, 1 à GND, 2 à +5V, 3 à SDA, 4 à SCL (3 et 4 je suis pas sur!). Et pour relier SDA et SCL 5V du module, à ESP 3.3V : il y a la possibilité avec des résistances ou intercaler un "Level Converter" . (Perso, j’utilise la deuxième).

Piquer sur le net: exemple avec 4 ADC1115 sur un bus I2C (deux fils)

:+1: A mon avis c'est une bonne solution de gérer les 8 EV avec un seul contrôleur. Et il peux s'occupe aussi de la réception radio.

Je veins de commander des DRV8874 Pour mon projet, restes plu-qu’à attendre !

Parenthèse dans la parenthèse :wink:

Cela dépend des GPIO que le concepteur choisit de sortir ... ou pas... en bord de carte.

La pluspart (toutes ?) des cartes ne permettent pas de profiter des 8 GPIO (32 à 39) correspondant aux 8 canaux d'ADC1 du module WROOM et de son circuit intégré ESP32

Chaque carte propose une sélection plus ou moins large de GPIO parmi l'ensemble de ceux du circuit intégré ESP32.

La doc de la carte ne peut donc recouvrir à 100% la doc du circuit intégré qu'elle utilise.

1 Like

Bonjour,

Je m'attendais à ce genre d'explication, merci pour les précisions, effectivement certains modules ont + de broches que d'autres.

Une réponse supplémentaire sur le sujet des MOS P.

Celui là devrait être dispo
AO3401.pdf (316,8 Ko)

En tout cas je le trouve chez Amazon.

Il coche beaucoup de cases de ce qu'il nous faut

Bonsoir;

Je me suis inspiré de


utilisé avec ça sur mon PhoneAndroid

et d'une partie de leurs codes pour piloter le PWM avec le Bluetooth

#include "BluetoothSerial.h"

String device_name = "ESP32-BT-Slave";

// Check if Bluetooth is available
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif

// Check Serial Port Profile
#if !defined(CONFIG_BT_SPP_ENABLED)
#error Serial Port Profile for Bluetooth is not available or not enabled. It is only available for the ESP32 chip.
#endif

BluetoothSerial SerialBT;

const int brochePwm = 19;
int freq =4900;
int dutyCycle = 127;
const int resolution = 8;
int dutyMax = 255;


void setup() {
  Serial.begin(115200);
  SerialBT.begin(device_name);  //Bluetooth device name
  //SerialBT.deleteAllBondedDevices(); // Uncomment this to delete paired devices; Must be called after begin
  Serial.printf("The device with name \"%s\" is started.\nNow you can pair it with Bluetooth!\n", device_name.c_str());
  //pinMode(outPwmPin, OUTPUT);
  ledcAttach(brochePwm, freq, resolution);
  ledcWrite(brochePwm, dutyCycle);
  
}

void loop() {

  if (Serial.available()) {
    SerialBT.write(Serial.read());
  }
  if (SerialBT.available()) {
    //Serial.write(SerialBT.read());

    String input = SerialBT.readString();  // Lecture de la chaîne de caractères entrée
    dutyCycle = input.toInt();  // Conversion en entier
    if (dutyCycle>1023){
      dutyCycle=1023;
    }
    if (dutyCycle<0){
      dutyCycle=0;
    }
    Serial.print("Nouvelle valeur de dutyCycle : ");
    Serial.println(dutyCycle);
    ledcWrite(brochePwm, dutyCycle);
  }
  //delay(20);

    /*if (Serial.available() > 0) {
    String input = Serial.readString();  // Lecture de la chaîne de caractères entrée
    dutyCycle = input.toInt();  // Conversion en entier
    if (dutyCycle>1023){
      dutyCycle=1023;
    }
    if (dutyCycle<0){
      dutyCycle=0;
    }
    Serial.print("Nouvelle valeur de dutyCycle : ");
    Serial.println(dutyCycle);
  }
  ledcWrite(brochePwm, dutyCycle);
  delay(100);*/
}

Le problème, ça traîne, mais ce n'est qu'un essai (j'envoie les consigne PWM en numérique, de 0 à 255)

Bonjour Charles,

Je viens de commander des ADS1115 et des Level converter pour faire quelques tests en réel avec mon ESP 32, on verra bien ce que ça donne.

Pour l'alimentation en 5V je vais utiliser le port USB de mon ordi dans un premier temps. Par contre pour la PCB il faudra que j'utilise un convertisseur 5v/3.3V ?

Bonjour Jef,

Il est bien dispo chez mon fournisseur, je fais la modif sur mon schéma.
ESP 32 V1.pdf (121,0 Ko)

J'attend de pouvoir tester mes ESP 32, je vais déjà faire un test d'envoi d'info entre mes deux ESP 32 pour contrôler la réactivité.

Pas vraiment, Sur ton ESP32, tu envois directement le +5V sur la pin 5V (ou Vin sur ton schéma). La carte à déjà son convertisseur 5V -> 3.3V (voir photo de mon poste précédant). Il devrais suffir pour tous le 3.3V que tu vas utiliser. Ci-dessous la diode c'est optionnel, c'est juste pour pas alimenter les autres éléments 5V si il y a que le PC qui fournit du 5V.

Je connais pas les mosfet, mais la datasheet dit: Vgs +/-12V, ça risque pas d'être juste avec 28V :scream: J'ai du mal à comprendre ce choix !

Bonjour,

J'ai juste proposé un bon MOSFET, il faut adapter le montage pour qu'il aille avec cette contrainte, ce n'est pas un probléme.

Un pont diviseur, une diode zener de limitation.

Quelque chose comme ça avec les bonnes valeurs, et adaptable 12 ou 24V
MOSP protection

No stress :roll_eyes:

Par contre, cela m'intrigue?

:cold_sweat: J'ai mélanger les symboles diode Schottky / diode Zenner ? je voulais une Schottky ! C'est si le système n'est pas alimenté et que vous connectez le PC, pour éviter d’alimenter d'autre composant avec le 5V_USB.

Ha oui cette fois je crois que j'ai compris, pour le pont diviseur quelque-chose comme ça !


Bon c'est pas toute à fais 2/3, j'ai fais ça de tête. C'est Vbat /(33+10) * 33 !

Ce n'est pas faux, mais pas tout à fait cela non plus.

Bon, de mon côté, je n'ai pas encore exploré le nouveau schéma de @william270peel pour suggérer mes remarques.

Donc j'en aurais sûrement une ou deux à vous présenter :wink:

C'est même sur et certain ! Je me répète mais je ne suis nul en choix des composants et en raccordement.

De mon côté j'ai reçu mes ESP32, je vais faire quelques montages de base pour me familiariser avec.

Bonjour,

Mes hypothéses de calculs:


Je veux
-Ic=5mA
-Vgs=10V (ça semble être bien pour avoir Rds(ON)=50m Ohms).
J'estime que
-Vce proche de 0V

Calcul de R2
10V/Ic=2k Ohms

Calcul de R1
R2=[Vbatt-10V]/Ic

Pour Vbatt=12V R2=0,4k
Pour Vbatt=24V R2=2.8k

Ensuite, pour absorber les variations
12--->18V ou 24--->28V, je met une zener 10V en parallèle à R2

Pour avoir 1 seul PCB et choisir 12Vbatt ou 24Vbatt, pour R2, je fais:

Le strap peut étre un simple point de soudure que je fais ou défais à volonté selon la tension batterie choisie.

ATTENTION, j'ai corrigé le texte original de ce post car j'avais inversé R1 et R2 dans les notations

Bonsoir;

Je ne suis pas un spécialiste code, donc j'ai utilisé ce que d'autre savent mieux faire que moi.
J'ai sur ce coup "NON" utilisé le Chat qui ne me disait rien de bien, mais j'ai utilisé ce que Ruis et Sara Santos écrivent dans leurs pdf (en vente en ligne) "Learn ESP32 3rd édition".

J'ai opté pour un modéle rapide selon moi,
"ESP-NOW One-way communication"
(One ESP32 board sending the same or different commands to different ESP32
boards.).

J'ai adapté le code pour envoyer de l'ESP2 à l'ESP1 la valeur analogique du potentiométre cablé en broche 34)

Ca donne cela

Emetteur ESP2
Dans "broadcastAddress, remplacer les XX par l'adresse de votre ESP1

#include <esp_now.h>
#include <WiFi.h>
// REPLACE WITH YOUR RECEIVER MAC Address
uint8_t broadcastAddress[] = {0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX};
esp_now_peer_info_t peerInfo;
// Structure example to send data
// Must match the receiver structure
typedef struct struct_message {
//char a[32];
int b;
//float c;
//bool d;
} struct_message;
// Create a struct_message called myData
struct_message myData;
// callback when data is sent
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
Serial.print("\r\nLast Packet Send Status:\t");
Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Send Success" : "Send Fail");
}
void setup() {
// Init Serial Monitor
Serial.begin(115200);
// Set device as a Wi-Fi Station
WiFi.mode(WIFI_STA);
// Init ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Once ESPNow is successfully Init, we will register for Send CB to
// get the status of Trasnmitted packet
esp_now_register_send_cb(OnDataSent);
// Register peer
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
// Add peer
if (esp_now_add_peer(&peerInfo) != ESP_OK){
Serial.println("Failed to add peer");
return;
}
pinMode(34, INPUT);
}
void loop() {
// Set values to send
//strcpy(myData.a, "THIS IS A CHAR");
//myData.b = random(1,20);
myData.b = analogRead(34);
//myData.c = 1.2;
//myData.d = false;
// Send message via ESP-NOW
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData,
sizeof(myData));
if (result == ESP_OK) {
Serial.println("Sent with success");
}
else {
Serial.println("Error sending the data");
}
delay(200);
}

Recepteur ESP1

#include <esp_now.h>
#include <WiFi.h>
// Structure example to receive data
// Must match the sender structure
typedef struct struct_message {
//char a[32];
int b;
//float c;
//bool d;
} struct_message;
// Create a struct_message called myData
struct_message myData;
// callback function that will be executed when data is received
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
memcpy(&myData, incomingData, sizeof(myData));
Serial.print("Bytes received: ");
Serial.println(len);
//Serial.print("Char: ");
//Serial.println(myData.a);
Serial.print("Int: ");
Serial.println(myData.b);
//Serial.print("Float: ");
//Serial.println(myData.c);
//Serial.print("Bool: ");
//Serial.println(myData.d);
Serial.println();
}
void setup() {
// Initialize Serial Monitor
Serial.begin(115200);
// Set device as a Wi-Fi Station
WiFi.mode(WIFI_STA);
// Init ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Once ESPNow is successfully Init, we will register for recv CB to
// get recv packer info
esp_now_register_recv_cb(esp_now_recv_cb_t(OnDataRecv));
}
void loop() {
}

Chez moi, ca marche, c'est une base de départ il me semble

PS, pour récupérer vos adresses MAC:

#include <WiFi.h>
#include <esp_wifi.h>
void readMacAddress(){
uint8_t baseMac[6];
esp_err_t ret = esp_wifi_get_mac(WIFI_IF_STA, baseMac);
if (ret == ESP_OK) {
Serial.printf("%02x:%02x:%02x:%02x:%02x:%02x\n",
baseMac[0], baseMac[1], baseMac[2],
baseMac[3], baseMac[4], baseMac[5]);
} else {
Serial.println("Failed to read MAC address");
}
}
void setup(){
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.STA.begin();
Serial.print("[DEFAULT] ESP32 Board MAC Address: ");
readMacAddress();
}
void loop(){
}

C'était ma contribution du jour.

PS: au passage, je recommande pour les "non codeurs" Ruis et Sara Santos "Learn ESP32 3rd édition"

Par acquis de conscience, j'ai mis l'émetteur dans une autre piéce à 10-12m, sur un chargeur de tél, et débranché la box, c'est OK, le récepteur reçoit les infos.

A priori l'ADC n'est effectivement pas terrible, à approfondir.

Bonjour Jef,

Il n'y a pas de solution sans strap ? car je voudrais qu'il n'y ai pas de modif à faire en cas de changement de tension ?

Pour l'ESP32 je prend le temps de comprendre le fonctionnement avec quelques tuto et test sur mon bureau. Et à vrai dire j'ai déjà un peu de mal à les faire communiquer ensemble :smirk:.

Bon j'ai passé l'après midi à essayer de connecter mon esp32 en wifi à un réseau local ...

Le programme :

#include <WiFi.h>

const char* ssid = "Testesp32";
const char* password = "123456789";

void setup()
{
	Serial.begin(115200);
	delay(1000);
	Serial.println("\n");
	
	WiFi.begin(ssid, password);
	Serial.print("Tentative de connexion...");
	
	while(WiFi.status() != WL_CONNECTED)
	{
		Serial.print(".");
		delay(100);
	}
	
	Serial.println("\n");
	Serial.println("Connexion etablie!");
	Serial.print("Adresse IP: ");
	Serial.println(WiFi.localIP());
}

void loop()
{
	
}

Problème dans le moniteur série j'ai se résultat ... :
ets Jul 29 2019 12:21:46

rst:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 0, SPIWP:0xee

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:DIO, clock div:2

load:0x3fff0030,len:4916

J'ai essayé de changé de type de carte, la fréquence flash (de 80MHZ à 40MHZ) mais rien y fait ... J'ai fais un programme simple ( avec touchread) pour allumé une led et ça fonctionne. donc la communication entre mon ordi et l'esp32 est ok. Je ne sais pas d'où vient le problème ...

Ça dépasse mes compétences.

ALLO LES PROS SVP!

Tu met une seul résistance en série avec la zener au lieu de 2, avec pour valeur 0,4k.