dinsdag 5 december 2023

ESP32 [4 : ESP32 - S2 testen van de I2C bus ]

De gemakkelijkste manier om de I²C bus te testen is het gebruik van een OLED display, daar heb ik al wat ervaring mee.

Het I²C adres wist ik nog ( 0x3C) en de SDA en SCL zijn gemakkelijk te vinden op de OLED , maar waar zitten die op het LOLIN S2  bordje?

Internet gaf uitsluitels ( na toch wat zoeken) en het bleek dat SDA dezelfde pin is  als MOSI en de CLK blijft de CLK.

Samengevat :

SDA : pin 11

CLK : pin 7

 

Ik gebruikte de lib's van Arduino om deze OLED aan te sturen maar dit werkte niet.

 

#include <Wire.h> // libraries voor oled display
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
 
Het vermoeden was dat de lib default de standaard pins gebruikte voor 
I²C voor de Adafruit bordjes.
 
Door in de Wire.h te snuisteren zag ik dat de mogelijk bestond om de
class te "overriden" ( = overloading) met de pins die ik nodig had
 
Snippet uit de lib:
 
public:
TwoWire(uint8_t bus_num);
~TwoWire();

//call setPins() first, so that begin() can be called without
  arguments from libraries

bool setPins(int sda, int scl);
 
 
 
Daar heb ik dan ook gebruik van gemaakt in mijne soft :
 
snippet :

Wire.setPins(11, 7); //override default pins met S2 pins voor SDA en CLK
 
Resultaat ziet U hieronder , het werkt! 



maandag 4 december 2023

ESP32 [3 : overdracht van de ESP8266 naar de ESP32 - S2 ]

Om eens te testen of de software kon overgezet worden van de ESP8266 naar de S2  heb ik de s/w een beetje moeten aanpassen.

De hardware is gelukkig identiek , zij het met andere benamingen, maar de pinnen komen overeen. 

 


 

Deze pinnummers moeten natuurlijk in de declaratie van de soft aangepast worden


Wel , het werkt goed.

Echter, toegang krijgen tot het S2 bord was niet zo simpel .Bij inpluggen van het bord via de USB -C kreeg ik geen connectie te zien en ook geen "device" in de lijst op Linux.Ik kreeg niets te zien , zelfs niet het blauwe ledje

Ik verwachtte ttyUSB0 onder de map devices, maar die was er niet.


Deze lijst is te vinden onder /dev

 



 Ook het gebruiken van de combinatie van de rst en het "0" drukknopje was nodig

Rst knopje indrukken en daarna het "0" knopje. Het "0" knopje lossen en daarna het rst knopje.

Uiteindelijk kwam het blauwe ledje te branden en ook zag ik een extra tty device maar het was niet ttyUSB0.

Het was ttyACM0


Dit was mij niet zo bekend en raar omdat de ESP8266 wel zich meldde met een ttyUSB0.

Ik heb dan maar eens het verschil opgezocht en in feite komt het hier op neer dat er enkel ttyUSB0 ( of ttyUSB1....) gemeld wordt als de aansluiting gebeurt via een " dedicated" device , zijnde een chip die de nodige drivers kunnen oproepen in de Linux kernel.

Zo'n chip kan van bv FTDI zijn of ook bekend is Prolific , SiLabs  enz...

Deze chip is wel aanwezig op  het ESP8266 bordje en was daardoor te zien als ttyUSB0.

Als er via ttyACMn gewerkt wordt dan is dit een generische verbinding rechtstreeks met de UART in de S2 chip en dit is hier ook het geval.Deze verbinding stamt eigenlijk nog uit de telex en  modem tijd en er kon ( kan) onderscheid gemaakt worden tussen data en/of commando's door een escape  commando geven met bv AT.

Eénmaal dit in orde kon ik ook  ttyACM0 selecteren in de IDE van Arduino en het programma laden en testen.

Wat ik wel ondervonden heb is , als ik het bordje laat werken op een externe voeding zonder USB kabel , het programma niet loopt.

Het was op te lossen door alle softwarelijnen die te maken had met de seriele poort uit te commentarieren. Dit is ook geen probleem omdat er toch geen PC aanhangt voor het doel dat ik het wil gebruiken.


Ik heb het bordje met het Lora shield getest in de nabijheid van een sterk antenneveld en dit bleef zorgeloos werken .