microman
niet storen aub, ben al gestoord genoeg !
hey
ik heb een mooie print gemaakt met een nodemcu ESP8266 op. Programmeren doe ik via arduino programma. Verschillende dingen werken reeds.
MAAR... ik wil alle GPIO's gebruiken. Zoals bvb GPIO6. Ik heb de manual gedownload van expressif. Maar ik geraak er niet wijs uit.
Ik moet vlngs mij GPIO.h hebben om dan de GPIO's in te stellen als output, input, pull up, high, low
GPIO_OUTPUT_SET(GPIO_ID_PIN(6, 1);
Heeft er iemand een simpele, uitleg en voorbeeldprogramma ??
Groet Microman
rudig76
Even iets anders www.echteworst.nl
De standaard arduino commando’s blijven werken toch als digitalwrite?
Heb je wat aan dit voorbeeld?
https://randomnerdtutorials.com/esp32-digital-inputs-outputs-arduino/
[Bericht gewijzigd door rudig76 op (41%)]
benleentje
Golden Member
Zoals bvb GPIO6
GPIO6 is in Arduino D14 of gewoon 14
Zo staat GPIO6 in een vakje met roze achtergrond en dat is de naam zoals die in de datasheet staat. Echter heeft arduino ervoor gekozen om daar andere namen aan te geven. De Arduino pinnummer is wat er als eerste direct naast de pin staat in het vakje met donkerbruin. Het is wat verwarrend maar als je de namen in het donker bruine vakje aanhoud dat zou het gewoon moeten werken
pinMode(14, output)
DigitalWrite(14, HIGH)Hou er wel rekening mee dat D14 ook in gebruik is als SPI inbterfase. Dus als je SPI gebruikt dan ken je D14 niet voor iets anders gebruiken. Zo hebben de meeste pinnen ook ander functie en die staan in het groen, geel, grijs of blauw weer gegeven
PS. Complimenten voor je openingspost met het meesturen van alle informatie en de extra link mbt tot de pinnummers van de ESP8266
microman
niet storen aub, ben al gestoord genoeg !
Geen succes.. heb alles geprobeerd.
Ik heb me vooral bezig gehouden met BEEPER op GPIO9.
Maar 9 of D9 of GPIO9. Hij doet het niet.
De functie van de output moet vlgns mij eerst aangepast worden naar GPIO
Geef mij maar Mikrobasic hoor, dat werkt altijd..
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <gpio.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define DATA_PIN D3 // OUT 1 = data output pin voor de ledstrip
#define LED_UP D6 // Led Enter button = power ON led
#define LED_ENTER D5 // Led Up button = internet verbinding OK led
#define LED_DOWN D7 // Led Down button
#define BUTTON_UP 21
#define BUTTON_ENTER 22
#define BUTTON_DOWN D8
#define RELAY_1 D11
#define RELAY_2 D13
const int BEEPER = 9;
const char *ssid = "telenet-AC36D28"; // kkkk
const char *password = "******";
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "europe.pool.ntp.org",0,60000); // 2 uur bijtellen 3600
void setup() {
display.begin(SSD1306_SWITCHCAPVCC,0x3C); // oled display aanzetten
display.clearDisplay();
display.display() ;
//pinMode(RELAY_1, OUTPUT);
//pinMode(RELAY_2, OUTPUT);
pinMode(BUTTON_UP, INPUT);
pinMode(BUTTON_ENTER, INPUT);
pinMode(BUTTON_DOWN, INPUT);
pinMode(LED_UP, OUTPUT); // Initialize the LED pin as an output
pinMode(LED_ENTER, OUTPUT); // Initialize the LED pin as an output
pinMode(LED_DOWN, OUTPUT); // Initialize the LED pin as an output
pinMode(BEEPER, OUTPUT);
//digitalWrite(RELAY_1, LOW);
//digitalWrite(RELAY_2, LOW);
display.setTextSize(2); // Oled scherm uur:minuten:seconden weergeven
display.setTextColor(WHITE);
display.setCursor(0,20);
display.println("Zoekt WiFi" );
display.display() ;
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED ) {
delay ( 200 );
digitalWrite(LED_ENTER, HIGH);
digitalWrite(LED_UP, LOW);
digitalWrite(LED_DOWN, HIGH);
digitalWrite(BEEPER, HIGH);
delay ( 200 );
digitalWrite(LED_ENTER, LOW);
digitalWrite(LED_UP, HIGH); }
digitalWrite(LED_DOWN, LOW);
digitalWrite(BEEPER, LOW);
digitalWrite(LED_ENTER, HIGH);
digitalWrite(LED_UP, HIGH);
digitalWrite(LED_DOWN, HIGH);
display.clearDisplay();
display.setTextSize(2); // Oled scherm uur:minuten:seconden weergeven
display.setCursor(10,20);
display.println("Connected" );
display.display() ;
timeClient.begin();
delay(2000);
}
String weekDays[7]={"Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag"};
String months[12]={"Januari", "February", " Maart", " April", " Mei", " Juni", " Juli", "Augustus", "September", "Oktober", "November", "December"};
void loop() {
display.clearDisplay();
timeClient.update();
time_t epochTime = timeClient.getEpochTime(); // ruwe data klok
struct tm *ptm = gmtime ((time_t *)&epochTime);
int zomerwinter = ptm->tm_isdst; // winteruur = 1 ; zomeruur = 0
if (zomerwinter == 1)
{timeClient.setTimeOffset(3600); } // winteruur = 3600 seconden minder
else
{timeClient.setTimeOffset(7200); } // zomeruur = 7200 seconden bij ntp-tijd bijtellen
String formattedTime = timeClient.getFormattedTime();
display.setCursor(12, 0); // tijd in HH:MM:SS
display.println(formattedTime);
display.setCursor(15,20);
String weekDay = weekDays[timeClient.getDay()]; // bvb Donderdag
display.println(weekDay);
int currentMonth = ptm->tm_mon+1; // welke maand: 0 = Januari , 4 = Mei, 11 = December
int monthDay = ptm->tm_mday;
display.setCursor(0,40); // welke dag: bvb 24
display.println(monthDay);
String currentMonthName = months[currentMonth-1];
display.setCursor(30,40); // welke maand: bvb November
display.println(currentMonthName);
int currentYear = ptm->tm_year+1900; // welk jaar //
display.display();
}
die linkse GPIO pinnen kan je maar beperkt gebruiken omdat ze ook gebruikt worden tussen chip en memory
Als BEEPER een simpel piezo speakertje is dan moet je die pin met de frequentie die je wilt horen hoog en laag maken. Nog beter werkt het als je de piezo tussen twee pinnen aansluit en deze steeds omwisselt, dus 1/0 en 0/1.
benleentje
Golden Member
Ik heb me vooral bezig gehouden met BEEPER op GPIO9.
Maar 9 of D9 of GPIO9. Hij doet het niet.
Ja ook logisch dat het niet werkt. want ik heb het eerder fout uitgelegd. Sorry daarvoor. Maar dat komt ook omdat NodeMCU er een zooitje van heeft gemaakt.
De namen en nummer die je in arduino moet gebruiken staan direct op de PCB naast de pin.
Io9 - GPIO9 - 9 = S2 en niet bruikbaar in arduino
https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/
Volgens bovenstaande website zijn er maar heel weinig pinnen bruikbaar. Dit komt niet door arduino zelf maar door hoe nodeMCU het bordje gemaakt heeft. Dit komt omdat chip extern geheugen gebruikt en omdat veel pinnen in gebruik zijn voor het opstarten en dus lezen uit dat externe geheugen
De bruikbare pinnen zijn
D1, D2, D3, D4, D5, D6, D7 en A0
D8 is na het opstarten bruikbaar maar alleen als output
De pinnen Rx en TX zijn ook bruikbaar. Rx alleen als input en Tx alleen als output.
Dus nogmaals dit zijn de namen die direct op de PCB staan
microman
niet storen aub, ben al gestoord genoeg !
Hey benleentje
Wat je zegt klopt helemaal. Dit zijn de enige pinnen die werken. Zo werkt mijn oled en die geeft de datum en tijd weer via internet. Nu heb ik via jlcpcb een mooie pcb gemaakt waar ik niets meer mee ben. Ik had na het lezen van de expressif pdf dat online te vinden is toch het idee voor een mogelijkheid om 17 gpio's te hebben. Er staat te lezen dat je de gpio's of predefined zoals spi comm. Of io. Maar het programma van arduino moet dit wel aankunnen natuurlijk. Dus?? Ik geef voorlopig nog niet op ?
buckfast_beekeeper
Van Lambiek wordt goede geuze gemaakt.
display.clearDisplay();
timeClient.update();Zou ik al zeker niet elke loop doen. Je gaat een heel flikkerend display verkrijgen. De ESP is ook niet zo slecht dat hij niet enkele minuten zonder sync kan. Sync 1 keer per uur en dat is meer dan genoeg.
Wijzig op je display alleen wat gewijzigd moet worden.
"February"Typo?
int zomerwinter = ptm->tm_isdst; // winteruur = 1 ; zomeruur = 0
if (zomerwinter == 1)
{timeClient.setTimeOffset(3600); } // winteruur = 3600 seconden minder
else
{timeClient.setTimeOffset(7200); }3600 seconden meer zal je bedoelen. Het is UTC + 3600 of UTC + 7200. Een goede library (ik gebruik ESPDateTime.h en TimeLib.h) stel je in en die doet de omschakeling zelf. Meestal in setup iets van
DateTime.setServer("europe.pool.ntp.org");
DateTime.setTimeZone("CET-1CEST,M3.5.0,M10.5.0/3");
DateTime.begin();
DateTime.forceUpdate();
Een ESP32 lijkt me beter met deze IO.
Nu heb ik via jlcpcb een mooie pcb gemaakt waar ik niets meer mee ben.
Hebben we (bijna) allemaal al gehad. Is leergeld.
Maar het programma van arduino moet dit wel aankunnen natuurlijk.
Je kan maar kleuren binnen de lijnen van de ESP8266 en deze verlangt nu eenmaal dat bepaalde IO hoog zijn bij het opstarten en andere net laag. Het is altijd goed opletten. Alleen wat in de link van benleentje als groen OK staat kan je probleemloos gebruiken. De rest is goed uitkijken en alleen als het niet anders kan.
edit:
int currentMonth = ptm->tm_mon+1; en
String currentMonthName = months[currentMonth-1];Waarom eerst 1 optellen en dat er daarna terug aftrekken. Je doet voor de rest niks met currentMonth
display.println(currentMonthName);Vervangen door
display.println(months[ptm->tm_mon])Zou hetzelfde moeten doen en waarschijnlijk kleiner compileren.
Hier wordt het jaar opgehaald en je doet er niks meer mee.
int currentYear = ptm->tm_year+1900;[Bericht gewijzigd door buckfast_beekeeper op (15%)]
microman
niet storen aub, ben al gestoord genoeg !
hey
ter info: klokje op oled werkt perfect -- geen geflikker -- klokje telt ook seconden -- daarmee wat meer updates nodig.
ik heb de manual van expressif de maker van de ESP8266 even in de bijlage gezet.
Met wat ik daar lees over de GPIO's zegt mijn gevoel het nog niet op te geven zodat ik alle 17 gpios kan gebruiken.
Enja, zoniet.. jammer dan 
Bijkomende vraag uit onwetendheid.. Heeft de ESP32 betere of meerdere functies of gpios. Anders is de oplossing... STOP met de roommel and move on
groet Microman
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
ter info: klokje op oled werkt perfect -- geen geflikker -- klokje telt ook seconden -- daarmee wat meer updates nodig.
Voor het display zelf wel natuurlijk (minstens 1x per seconde...
)
Voor updaten van de tijd zelf is 1x per uur (of per dag) ruim voldoende.
buckfast_beekeeper
Van Lambiek wordt goede geuze gemaakt.
Zoals Arco ook al zegt, je hebt die updates niet nodig voor het correcte uur. Wat de ESP8266 of ESP32 mis loopt kunnen wij op 1 uur niet zien. Dan heb je toch wel enkele dagen nodig. Ga je elke loop de NTS server pollen, kan het zijn dat ze je blokken. Het neemt ook gewoon elke loop tijd in beslag.
Laat het display gewoon aan en ververs elke seconde de seconden. Elke minuut de minuten. Elk uur de uren. 1 keer per dag wijzig je de datum.
Nu flikkert het display nog niet. Je wil echter ook een ledstrip toevoegen.
#define DATA_PIN D3 // OUT 1 = data output pin voor de ledstrip Afhankelijk van de lengte van de strip gaat ook dat tijd nemen in je loop. Waardoor de kans op flikkering vergroot.
Op zondag 28 april 2024 14:53:53 schreef microman:
hey[...]
Bijkomende vraag uit onwetendheid.. Heeft de ESP32 betere of meerdere functies of gpios. Anders is de oplossing... STOP met de roommel and move on
groet Microman
ESP32.
ESP32 32 160 of 240MHz. ESP8266 80 of 160MHz. Bij een ESP32 is er ook meer geheugen aan boord. In deze waarschijnlijk niet de doorslaggevende factor.
ESP8266 is geen rommel. Voor bepaalde zaken kan die best voldoen. Ik heb die ook in gebruik voor alleen een eenvoudig display of het sturen van enkele IO. Ga je echter richting TFT en Bodmer TFT_eSPI en takkaO OpenFontRender, dan heeft de ESP8266 te weinig RAM.
ESP 32 met 4" TFT met TFT_eSPI en OpenFontRender. De dubbele punt wisselt elke seconde aan/uit. Minuten worden elke minuut ververst. Omdat de nieuwe cijfers de oude niet geheel overschrijven wordt eerst de vorige minuut in het zwart geschreven. Uren elk uur en de datum 1 keer per dag. Tijd update 1 keer om middernacht.
Bodmer OpenWeather. Ook hier weer hetzelfde. Alleen wat wijzigt, wordt geschreven. De weersverwachting wordt na 15 seconden vervangen door de verwachting voor de volgende uren. In de laatste versie hangt er een GPS aan om zo plaats afhankelijke weersverwachtingen te verkrijgen.