Pub

Affichage des articles dont le libellé est ESP32. Afficher tous les articles
Affichage des articles dont le libellé est ESP32. Afficher tous les articles

jeudi 25 mai 2023

Nouvelle version m5sc-rfxp-0-6-1.ino

Une nouvelle mise à jour du logiciel RFXperiment pour le M5Stack Core vient de sortir, il s'agit de la version 0.6.1 du 25/05/2023.

Cette version apporte une nouvelle fonction de surveillance qui produit une alarme si la carte contrôleur ESP32-D1-R32 où sont connectés les récepteurs ne publie plus ses données dans le temps imparti (la carte ESP32-D1-R32 publie normalement ses flux de mesure de réception en MQTT toutes les 30 secondes).
Auparavant, le M5Stack Core était simplement en attente des données et les traitait quand elles arrivaient. Mais un souci récent survenu sur mon réseau Wifi ayant bloqué la publication des données, il m'est apparu nécessaire que le M5Stack Core soit en mesure d'afficher une alerte quand il attend trop longtemps lorsque la carte ESP32-D1-32 devient muette pour une raison quelconque.

J'ai fait aussi quelques modifications cosmétiques pour améliorer un peu l'aspect général de l'affichage principal.

D'autre part, j'ai décidé de n'utiliser plus que quatre couleurs pour les niveaux de réception sur une échelle de valeurs allant de 0 à 5.
(valeur 0 : gris ; valeur > 0 et < 1.5 : rouge ;  valeur >= 1.5 et < 3.5 : orange ; valeur >= 3.5 et <= 5 : vert)

Voilà ce que ça donne sur cette nouvelle version :





à plus !

*** 73 de Guy - F8ABX ***

mercredi 17 mai 2023

RFXperiment : corrections de bugs

Finalement, ce qui devait être l'ultime version 0.6.0e a dû être modifiée afin de corriger un bug dans des arrondis de valeurs. La dernière version du code source sur le M5Stack Core est "m5sc-rfxp-0-6-0f.ino" du 14/05/2023.





Sur la carte ESP32-D1-R32 où les deux récepteurs Panasonic RF-2400D sont connectés, j'ai aussi modifié le code pour corriger le même bug. Le code source est maintenant "esp32-rfxp-4-4-2.ino" (modifié le 15/05/2023).





*** 73 de Guy F8ABX ! ***

samedi 26 juin 2021

Radio Signal Monitor / RXperiment (6) suite et fin du sujet

 La version mk4 du Radio Signal Monitor FM, soudée sur un shield de prototypage est en service !





La suppression des fils volants et de la breadboard élimine de nombreux parasites générés par le montage lui-même.
Le niveau plancher de réception est revenu à zéro, alors qu'un était presque toujours à un sur le prototype en fils volants. De l'importance, comme toujours, en radio : des liaisons courtes ! Mais bon, pas toujours évident à respecter lorsqu'on réalise un proto.





Le Radio Signal Monitor FM publie ses données à l'URL suivante :

  https://io.adafruit.com/guyvano/dashboards/rsmfm


Ceci clôt la série d'articles sur le Radio Signal Monitor / RXperiment.

A bientôt, et faites de beaux montages !


****  73 de Guy F8ABX - 26/07/2021 ****
Twitter: @guyvano 
https://twitter.com/guyvano


vendredi 25 juin 2021

Radio signal monitor / RXperiment (5)

 Je suis en train de tester la version mk4 de mon Radio Signal Monitor, comme indiqué précédemment, avec le circuit TEA5767. Il fonctionne beaucoup mieux que le VMA444 (Si4703) : meilleure sensibilité en réception, pas d'effet de main, prises d'antenne et d'écouteurs séparés.
J'ai rallongé l'antenne télescopique fournie avec le circuit avec du fil de fer car d'origine, elle ne fait que 24 cm ! La longueur totale de l'antenne est maintenant d'environ 70 cm.
Le TEA5767 n'a pas de décodeur RDS, c'est dommage, mais on a la possibilité d'avoir la force du signal reçu de 0 à 15, et c'est bien l'essentiel compte tenu de la finalité du montage.

Pour voir la force des signaux reçus, c'est ici : https://io.adafruit.com/guyvano/dashboards/rsmfm

A l'heure où j'écris cet article, c'est la fréquence 106,9 MHz qui est monitorée. Il n'y a pas de station locale sur cette fréquence, le but est de détecter des épisodes de propagation exceptionnelle des ondes radio (sporadiques E, propagation troposphérique exceptionnelle). Lors de ces épisodes, des stations lointaines sont captées.

Avec cette version 4, le niveau de réception est mesuré et transmis à la plateforme IOT d'Adafruit toutes les 30 secondes environ.
Si vous avez un compte sur cette plateforme, connectez-vous car le rafraîchissement des données sera alors automatique, sinon la page web du tableau de bord (dashboard) reste statique et il vous faudra la rafraîchir manuellement.

C'est toujours une carte microcontrôleur ESP32-D1-R32 qui assure le traitement et les communications, avec le TEA5767 en I2C, et en Wifi avec la plateforme IOT d'Adafruit en utilisant le protocole MQTT.
Un ordinateur est seulement requis pour le développement et le téléchargement du logiciel dans le microcontrôleur, après ça se débrouille tout seul. 

Si cette version mk4 fonctionne comme prévu, la fonction de baromètre connecté y sera transférée (circuit BMP280 en I2C) et la version mk3 qui tourne actuellement en parallèle pourra alors être arrêtée. La version mk3 mobilise un récepteur
hacké Sony que je souhaiterais démobiliser !


*** 73 de Guy F8ABX - 25/06/2021 ***


dimanche 6 juin 2021

Radio signal monitor / RXperiment (4)

edit 11/06/2021 : le décodage du RDS est actuellement désactivé en attendant la mise en service d'un autre circuit en remplacement de l'actuel, trop peu performant.

 L'affichage du RDS a été rajouté au projet Radio signal monitor / RXperiment.

voir en bas de la page : https://io.adafruit.com/guyvano/dashboards/rxperiment
ou à la page dédiée au log RDS : https://io.adafruit.com/guyvano/dashboards/rds

Une première version tourne actuellement en test avec un circuit Velleman VMA444 (circuit intégré Si4703) mais le résultat est assez décevant car le décodage du RDS n'est vraiment pas performant, même pour les stations locales puissantes. Il y a donc peu de chances que le circuit décode le RDS des stations reçues dans des conditions plus difficiles.

 



Actuellement, le nom de la station est envoyé au site IO Adafruit entre crochets [ ] selon un cycle de 30 secondes environ et la fréquence est rappelée tous les 10 cycles, sans crochet.

Une prochaine version sera réalisée avec un circuit à base de TEA5767, en espérant que le décodage du RDS sera meilleur et plus rapide.

Actuellement, le RSM* est réglé sur 101,3 MHz. C'est une fréquence sur laquelle il n'y a pas de station locale.
Le but est de détecter les phénomènes de propagation troposphérique exceptionnels, d'afficher un graphique des signaux reçus et si possible d'afficher le nom des stations reçues, dans la mesure où leur RDS est décodable.


(*) RSM : abrégé pour Radio Signal Monitor / RXperiment , le nom du projet ESP32 en cours.


.**** 73 de Guy F8ABX - 06/06/2021 ****

lundi 10 mai 2021

Radio signal monitor / RXperiment - mon nouveau projet ESP32 (2)

Le câblage des composants :




Le raccordement à la carte microcontrôleur :




La version actuelle de RXperiment mk3 :

Les composants sont désormais soudés sur un shield de prototypage pour Arduino (compatible avec la carte ESP32-D1-32). Seul l'optocoupleur a été modifié, sa LED jaune a été remplacée par une LED rouge plus lumineuse pour un meilleur éclairement de la photorésistance.








Télémétrie publiée sur https://aprs.fi/telemetry/a/F8ABX-10 
 
  Graphique 1 : QNH (pression atmosphérique ramenée au niveau de la mer).
  Graphique 2 : Temp (température au niveau du montage).
  Graphique 3 : Hsnsr (H sensor : champ magnétique mesuré par la sonde à effet Hall du microcontrôleur).
  Graphique 4 ; Band (bande de fréquence, 0 : OFF, 1 : LF/LW, 2 : MF/MW, 3 : HF/SW, 4 : VHF/FM).
  Graphique 5 : RXprm (qualité de la réception en %)
     C'est le pourcentage du temps d'allumage de la LED "tune" du récepteur Sony, sur un échantillon de 256 mesures pendant 5 minutes.





réception sur 153 kHz pendant 24 heures.
La nuit, la station roumaine Antena Satelor est reçue. 




Etat de la réception en cours sur https://bit.ly/RXperiment
(pour avoir des précisions sur le monitoring en cours : la fréquence précise, la date et l'heure de début)


La pression atmosphérique est aussi publiée sur
 https://www.wunderground.com/dashboard/pws/IFAREI3


Et un grand merci à Peter Buchegger OE5BPA pour son « APRS-IS library for ESP32 » qui permet de publier simplement des données sur APRS-IS !
  info ici :  
https://www.arduino.cc/reference/en/libraries/aprs-is-lib/


*** 73 de Guy F8ABX - 10/05/2021 ***



jeudi 22 avril 2021

Radio signal monitor / RXperiment - mon nouveau projet ESP32 (1)

 Voici ma nouvelle réalisation autour d'un récepteur multi-bandes Sony, avec un circuit ESP32-D1-R32 avec quelques composants additionnels sur une planche à contacts pour prototypage.


Le but est d'évaluer le niveau relatif d'un signal reçu par la radio et de publier les résultats sous forme de données télémétriques avec d'autres informations via le réseau APRS-IS .
On peut voir ces donnés sur : https://aprs.fi/telemetry/a/F8ABX-10 

Il est transmis : la pression atmosphérique (QNH), la température (Temp) et le champ magnétique (Hsnsr) au niveau du circuit, la bande où se trouve la fréquence écoutée (Band) et bien sûr le niveau de réception (RXprm) puisque c'est ce qui m'intéresse au départ, c'est le 5ème et dernier graphique en bas de la page web dont l'URL est donné plus haut.

Le récepteur Sony ICF-SW7600G a subi un petit "hack" consistant à placer deux fils en parallèle sur sa LED rouge "Tune" afin de récupérer une tension directement liée au niveau de réception HF. A la suite de tests, comme une connexion directe sur une entrée analogique du microcontrôleur injectait trop de parasites dans le récepteur, il a fallu ajouter un couplage indirect. Après des essais non concluants par couplage magnétique avec le capteur à effet Hall intégré au microcontrôleur, j'ai finalement choisi un couplage par optocoupleur... Mais n'ayant pas d'optocoupleur, j'en ai fabriqué un, avec les composants que j'avais sous la main : une LED jaune et une photorésistance, le tout bien isolé de la lumière ambiante avec du chatterton.



avec les moyens du bord...



et voilà un optocoupleur !

A noter que la photorésistance n'est pas trop réactive lors de brèves impulsions. Une amélioration sera apportée prochainement.

Néanmoins pour l'instant, le circuit fait le travail demandé !


tests de réception sur la gamme de fréquences MW.


Méthode de mesure du signal :

Le niveau de réception est donné en pourcentage :
Sur une durée de 5 minutes, on effectue 256 mesures. A la fin de la période de collecte des mesures, on calcule le pourcentage que représente les valeurs qui ont dépassé un certain seuil. Ce seuil a été déterminé expérimentalement et correspond environ à la moitié de la tension mesurée lors d'une réception optimale.

Codification des bandes de fréquences (Band) + bits 1234 dans la télémétrie :

Band # 0 = OFF : pas de réception en cours (bits 0000).
Band # 1 = RxLF : réception en cours en LF/LW (bits 1000).
Band # 2 = RxMF : 
réception en cours en MF/MW (bits 0100).
Band # 3 = RxHF : 
réception en cours en HF/SW (bits 0010).
Band # 4 = RxVHF : réception en cours en VHF/FM (bits 0001).

Le circuit et le logiciel étant actuellement en test, je donnerai plus de détails sur cette réalisation dans un prochain article.
En attendant, vous pouvez voir les résultats publiés sur 
https://aprs.fi/telemetry/a/F8ABX-10 

Suivez aussi l'état de la réception en cours sur bit.ly/RXperiment
Vous saurez ainsi précisément sur quelle fréquence est le récepteur et depuis quand.


**** Cordiales 73 ! Guy F8ABX 22-28/04/2021 ****





samedi 27 mars 2021

Baromètre connecté : schéma et code

La toute première version du 22 mars dernier ne gérait pas correctement les problèmes de communication, mais après une modification du code le lendemain, le baromètre fonctionne depuis en permanence et il transmet correctement ses mesures à Weather Underground. La mesure de la pression atmosphérique ramenée au niveau de la mer (QNH) est transmise toutes les 5 minutes au site. En cas de problème de connexion, un nouvel essai est fait 2 minutes plus tard. Au delà de 5 échecs de connexion, le micro contrôleur redémarrera.

Les mesures sont consultables ici https://bit.ly/barogrelonges 

Faites défiler la page car le graphique est situé presque tout en bas. Par défaut, le site affiche en la pression en pouces de mercure mais l'on peut l'avoir en hPa (bouton réglages en haut à droite, puis °C pour avoir la pression en hecto-Pascal...).

Pour publier ses mesures sur Weather Underground, il faut d'abord s'être créé un compte et au moins un "device".
L'identifiant du device et son mot de passe associé sont indispensables pour la publication des mesures.
En ce qui concerne la connexion à Internet, il faudra rentrer le SSID et le mot de passe de votre connexion Wifi dans le programme.
Il faut de même renseigner correctement l'altitude du capteur (en mètres).
Donc en tout, il y a 5 constantes à personnaliser dans le programme.

Depuis le 23 mars 2021, cette version me donne satisfaction.


Le schéma de câblage des composants :





Le code de la v.2.0.0 du 23 mars 2021 :

/* Program name: esp32-baro-wu-2-0-0.ino
   Author: Guy Vanoverbeke @GuyVano
   Program last update (dd/mm/yyyy) : 23/03/2021 - V.2 R.0 C.0
   Arduino IDE V1.8.13
   Board: ESP-WROOM-32
   Function: Publish the barometric pressure from a BME280 sensor on the Weather Underground web site.
   Disclaimer:
   This program (in other words: this code, this software or this application) is a personal creation
   made as part of a hobby and it is given without guarantee of any kind and no support is provided.
   It is free of rights and can be reused freely as you wish.
*/

#include <Wire.h>
#include <WiFi.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Adafruit_BME280 bme; // I2C
#include <HTTPClient.h>
//
// Wifi SSID and password
//
const char* ssid       = "my Wifi SSID";
const char* password   = "my Wifi password";

//
// Weather Underground device ID and password
//
const char* wudevid    = "my WU device ID";
const char* wudevpw    = "my WU device password";

//
const float myaltitude = 186; // my sensor altitude in meters
//
const boolean autcnx = true; // autorize the connection in http flag
const boolean spr = false;   // true for serial prints or false for no prints
const unsigned long ndly = 300000; // 300000 for 5 minutes. Normal delay between each data upload
const unsigned long edly = 120000; // 120000 for 2 minutes. Retry delay after error
//
float temp = 0;
float hr = 0;
float qfe = 0;
float myqnh = 0;
float myqnhinches = 0;
String wumsg; // http connection url + data to transmit
boolean error = false; // error flag
boolean rderr = false; // sensor read error flag
boolean cnxok = false; // http connection ok flag
int serr = 0; // sensor error counter
int herr = 0; // internet error counter
int hcode = 0; // returned http code
int i = 0; // loop control
String htxt; // returned http text
unsigned snsrsts; // sensor status
//
void setup() {
  //
  pinMode(19, OUTPUT); // red LED for error
  pinMode(23, OUTPUT); // green LED ok
  //
  do {
    digitalWrite(19, LOW);
    digitalWrite(23, HIGH);
    delay(500);
    digitalWrite(19, HIGH);
    digitalWrite(23, LOW);
    delay(500);
    i++;
  } while (i < 6);
  // start the serial connection
  if (spr) {
    Serial.begin(115200);
    // wait for serial monitor to open
    while (! Serial);
  }
  //
  // Connect to WiFi
  //
  if (spr) {
    Serial.println("Connecting to Wifi...");
  }
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    if (spr) {
      Serial.print(">");
    }
  }
  if (spr) {
    Serial.println();
    Serial.println(" Wifi connected.");
    //
    Serial.println();
    Serial.println("BME280 linking...");
  }
  // default settings
  snsrsts = bme.begin(0x76);
  if (!snsrsts) {
    rderr = true;
    error = true;
    if (spr) {
      Serial.println("BME280 sensor not found.");
    }
  }
}
void loop() {
  //
  HTTPClient http;
  rdSensor();
  if (spr) {
    prtValues();
  }
  bldwuMsg();
  if ((!rderr) & (autcnx)) {
    http.begin(wumsg);
    hcode = http.GET();
    htxt = http.getString();
  }
  if (spr) {
    Serial.println();
    Serial.print("Returned code: ");
    Serial.print(hcode);
    Serial.print(" / ");
    Serial.println(htxt);
  }
  if (hcode == 200) {
    // a return code 200 means success
    herr = 0;
    error = false;
    cnxok = true;
  } else {
    herr = herr + 1;
    cnxok = false;
    error = true;
    if (spr) {
      Serial.println();
      Serial.print("HTTP error #");
      Serial.print(herr);
      Serial.println(".");
    }
  }
  //
  //
  //
  if (error) {
    digitalWrite(19, HIGH);
  } else {
    digitalWrite(19, LOW);
  }
  if (cnxok) {
    digitalWrite(23, HIGH);
  } else {
    digitalWrite(23, LOW);
  }
  if (herr > 5) {
    // too much errors, restart the MCU
    ESP.restart();
  }
  //
  //
  //
  if (error) {
    delay((edly - 2000));
  } else {
    delay((ndly - 2000));
  }
  digitalWrite(19, LOW);
  digitalWrite(23, LOW);
  delay(2000);
  hcode = 0;
  htxt = ' ';
}
void prtValues() {
  //
  // Print Temperature, Humidity and barometric pressure
  //
  Serial.print("Temperature = ");
  Serial.print(temp);
  Serial.println(" °C");
  Serial.print("Humidity = ");
  Serial.print(hr);
  Serial.println(" % ");
  Serial.print("Pressure = ");
  Serial.print(myqnh);
  Serial.println(" hPa");
}
void rdSensor() {
  //
  temp = bme.readTemperature();
  hr = bme.readHumidity();
  qfe = bme.readPressure() / 100.0F;
  // myqnh = qfe + (myaltitude * 0.1205F); // previous used formulae
  myqnh = qfe / pow((1 - (myaltitude * (0.0065 / 288.15))), 5.255); // OACI standard atmosphear formulae
  myqnhinches = myqnh * 0.02953F;
  if ((myqnh < 860) | (myqnh > 1090)) {
    //
    // myqnh is out of range, probably error sensor or wiring
    //
    serr = serr + 1;
    rderr = true;
    error = true;
    if (spr) {
      Serial.println();
      Serial.print("Error reading sensor #");
      Serial.print(serr);
      Serial.println(".");
    }
  } else {
    serr = 0;
    rderr = false;
    error = false;
  }
  //
}
void bldwuMsg() {
  //
  // build the internet message for Weather Underground publishing
  //
  wumsg = "https://weatherstation.wunderground.com/weatherstation/updateweatherstation.php?ID=";
  wumsg = wumsg + wudevid + "&PASSWORD=" + wudevpw + "&dateutc=now&baromin=";
  wumsg = wumsg + myqnhinches + "&action=updateraw";
  //
  if (spr) {
    Serial.println();
    Serial.println(wumsg);
  }
}
// End of program 
esp32-baro-wu-2-0-0.ino - Thanks for watching !


Cordiales 73 !


**** Guy F8ABX - 27/03/2021 ***



lundi 22 mars 2021

Baromètre connecté avec ESP32

 Je viens de mettre à niveau mon circuit baromètre avec une nouvelle version 2.0 connectée. Cette fois-ci, je n'utilise plus d'Arduino Uno mais un ESP32 car ce dernier a l'avantage d'intégrer nativement le Wifi.
Le logiciel est pour l'instant une version de développement un peu frustre mais une version un peu plus présentable devrait voir le jour et je la publierai dans un autre article prochainement.


Le circuit :


Les composants sont réduits au minimum vital : la carte micro contrôleur ESP-WROOM-32, le module de mesure BME280 qui communique avec le micro contrôleur en I2C, deux LED et deux résistances de 220 ohms. Et bien sûr la plaque de prototypage, quelques fils de câblage et une alimentation secteur 5V.

Comme le montage est autonome, c'est-à-dire qu'il fonctionne seul sans le recours d'un pc, j'ai donc souhaité avoir un affichage minimal pour m'assurer de son bon fonctionnement :
La LED verte indique que la dernière connexion au serveur Internet de Weather Underground a réussi. La LED rouge indique qu'il y a eu un problème de connexion Internet ou bien un problème de mesure.

Actuellement, le baromètre publie ses mesures de pression atmosphérique (QNH) toutes les 5 minutes sur Weather Underground et l'on peut les voir ici :

 https://www.wunderground.com/dashboard/pws/IFAREI3/ 

ou via le raccourci https://bit.ly/barogrelonges

Par défaut sur Weather Underground, les pressions barométriques sont indiquées en pouces de mercure, mais on peut les avoir en hecto-Pascal en cliquant tout en haut à droite sur l'engrenage puis °C afin de passer en système métrique.

A bientôt !


**** Guy F8ABX - 22, 25/03/2021 ****