Probleme heltec HTIT-W8266 WLAN und OLED

Hallo zusammen!
ich benutze
W11, Arduino IDE 2.3.3 mit einem heltec HTIT-W8266 oder auch
WiFi Kit 8 OLED genannt und komme mit dem Sketch nicht weiter.
'Test 2' wird nie angezeigt. Was mach ich falsch?
VG Thomas

Hier mein Sketch:

/*
WiFi Kit 8 OLED
heltec HTIT-W8266
NodeMCU 1.0 (ESP-12E Module)
*/


#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
// The pins for I2C are defined by the Wire-library. 
// On an arduino UNO:       A4(SDA), A5(SCL)
// On an arduino MEGA 2560: 20(SDA), 21(SCL)
// On an arduino LEONARDO:   2(SDA),  3(SCL), ...
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32

#include <ESP8266WiFi.h>                                   // WLAN Bibliothek einbinden



Adafruit_SSD1306 oled( SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET );


  uint8_t        iWLANs;                                   // Speichert die Anzahl der entdeckten WLANs
  const uint16_t WLANmax = 20;                             // Maximale WLAN Anzahl

  struct WLAN_str
  {
    char     ssid[22];                                     // die SSID den WLANs
    char     pw[63];                                       // das Password des WLANs
    uint8_t  channel;                                      // Kanalnummer
    sint16_t rssi;                                         // die Feldstärke des WLANs
    bool     sichtbar;                                     // 'true', wenn das WLAN sichtbar ist
    uint8_t  verschluesselt;                               // Schlüssel: 2-WPA/PSK, 4-WPA2/PSK, 5-WEP, 7-offen, 8-WPA/WPA2/PSK 
  } WLAN[ WLANmax ];                                       // Platz für bis zu 'iWLANmax' WLANs

  uint16_t       I;                                        // Zähler
  char           cSatz[100];
  char           cZahl[10];



void setup()
{

  Serial.begin( 9600 );

  if( !oled.begin( SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS ) )
  {
    Serial.println( F( "SSD1306 allocation failed" ) );
    for(;;); // Don't proceed, loop forever
  }

  oled.setTextSize(2); // Draw 2X-scale text

  oled.setTextColor( SSD1306_WHITE );

  oled.clearDisplay();

  oled.setCursor( 0, 0 );
  oled.println( F( "Test 1" ) );
  oled.display();

  delay( 1000 );

  WLANs_ermitteln();                                       // hiernach funktioniert des oled nicht mehr!

  //oled.clearDisplay();
  oled.setCursor( 0, 16 );
  oled.println( F( "Test 2" ) );
  oled.display();

  delay( 1000 );

}



void loop()
{
}




void WLANs_ermitteln()
{
  uint16_t N;                                              // Zähler

  iWLANs = WiFi.scanNetworks();                            // Netzwerk nach WLANs durchsuchen

  if ( iWLANs > WLANmax ) iWLANs = WLANmax;                // Anzahl der WLANs begrenzen

  for ( N=0; N<iWLANs; N++ )
  {

    WiFi.SSID( N ).toCharArray( WLAN[N].ssid, 22 );
    WLAN[N].rssi           = WiFi.RSSI( N );
    WLAN[N].channel        = WiFi.channel( N );
    WLAN[N].sichtbar       = ! WiFi.isHidden( N );
    WLAN[N].verschluesselt = WiFi.encryptionType( N );

  }

}

was macht


void WLANs_ermitteln()

vermute der bleibt hier stehen, schreib dir paar Serial.println, vor dem WLAN und danach

Es werden periodisch die Grundparameter der verfügbaren WLANs ermittelt und gespeichert. Sinn des ganzen Sketches ist es, zu ermitteln
(wo und wie weit) ein bestimmtes WLAN zu empfangen ist.

Ich habe das Unterprogramm etwas abgewandelt:

void WLANs_ermitteln()
{
  uint16_t N;                                              // Zähler

  iWLANs = WiFi.scanNetworks();                            // Netzwerk nach WLANs durchsuchen

  if ( iWLANs > WLANmax ) iWLANs = WLANmax;                // Anzahl der WLANs begrenzen

  for ( N=0; N<iWLANs; N++ )
  {

    WiFi.SSID( N ).toCharArray( WLAN[N].ssid, 22 );
    WLAN[N].rssi           = WiFi.RSSI( N );
    WLAN[N].channel        = WiFi.channel( N );
    WLAN[N].sichtbar       = ! WiFi.isHidden( N );
    WLAN[N].verschluesselt = WiFi.encryptionType( N );

    Serial.println();
    Serial.println();
    Serial.print( F( "WLAN  : " ) ); Serial.println( N );
    Serial.print( F( "SSID  : " ) ); Serial.println( WLAN[N].ssid );
    Serial.print( F( "RSSI  : " ) ); Serial.println( WiFi.RSSI( N ) );
    Serial.print( F( "Kanal : " ) ); Serial.println( WiFi.channel( N ) );
    
  }

}

Das steht in der Ausgabe:
19:40:53.219 ->
19:40:53.219 -> WLAN : 0
19:40:53.219 -> SSID : GeThoWi
19:40:53.219 -> RSSI : -23
19:40:53.219 -> Kanal : 1
19:40:53.219 ->
19:40:53.219 ->
19:40:53.219 -> WLAN : 1
19:40:53.307 -> SSID : GeThoWi Gastzugang
19:40:53.307 -> RSSI : -45
19:40:53.307 -> Kanal : 1

In mir drängt sich der Verdacht auf, dass die Bibliotheken von Adafruit
und ESP8266WiFi nicht harmonisch zusammen laufen.
Ich habe verschiedene OLED Bibliotheken ausprobiert, keine
funktioniert!

Grundsätzlich laufen die schon zusammen. Ich tippe mal, es sind kompatibltätsprobleme mit der IDE und oder der core Version.
Ich verwende bisher noch die IDE 1.8.19 als portale und die core-Version 2.0.17 2.7.4 und habe da bisher kaum bis keine Probleme.

Dieser Typ ist mir unbekannt, habe ich auf int16_t rssi; geändert.

ESP8266 habe ich nicht, daher Test mit ESP32:

image

Das Programm WiFiScan.ino hat bei mir diese Ausgabe:

19:56:24.417 -> Scan start
19:56:30.435 -> Scan done
19:56:30.435 -> 3 networks found
19:56:30.435 -> Nr | SSID                             | RSSI | CH | Encryption
19:56:30.435 ->  1 | FRITZ!Box 7590 UN                |  -36 |  6 | WPA2
19:56:30.435 ->  2 | FRITZ!Box 7590 UN                |  -90 |  6 | WPA2
19:56:30.481 ->  3 | WLAN-18081938                    |  -94 | 11 | WPA2

Möglicherweise hilft Dir ein Vergleich :slightly_smiling_face:

Komisch das der Compiler das frisst

Gibt es nicht bei ESP8266, meinst 2.7.4 ist die letzte dann kommt 3.xx

Stimmt, danke. Wurde geändert.
Habe in lezter Zeit wohl zu viel mit dem ESP32 rumgemacht. :wink:

@ agmue

sint16_t = signed Integer 16 Bit
uint16_t = unsigned Integer 16 Bit

Der Wert RSSI ist immer negativ!
Darum ist das Vorzeichen zwingend.

'sint16_t' does not name a type;

Diese Fehlermeldung hat mich drauf gebracht. Eventuell eine Spezialität vom ESP8266.

Danke für die Info, hilft Dir aber leider nicht weiter.

Also ich kenne den signed int 16 Bit als int16_t ohne s vorn dran.

Gruß Tommy

Auf einem ESP8266 mit der IDE 1.8.19 und ESP core 3.1.2 funktioniert der tatsächlich.
Und auch auf core 2.7.4.

@Tommy56: Ja, ich auch.

@HotSystems: Da war wohl jemand kreativ :rofl:

Ist dann aber wohl nicht die Ursache des Problems.

Nicht unbedingt, nur mal mit 2 Einstellungen getestet.
Auch weil ich grad mit dem ESP8266 am probieren war.

Nee, tatsächlich nicht.
Meine Vermutung habe ich ja schon in Post #5 geäußert.

So, hier erstmal der link https://heltec.org/project/wifi-kit-8/

Ich habe die IDE 1.8.19 gefunden, geladen und installiert aber
auch damit funktioniert der Sketch nicht.
Morgen werde ich weiter suchen.
Nochmals danke - bis morgen

Das ist schon sehr aussagekräftig.
Hast du nicht mehr Informationen dazu ?
Welche core-Version hast du installiert ?

Wie soll da einer helfen ?

Also das Display nutzt Standard I²C = GPIO 4 und 5, somit sollten alle Lib funktionieren sofort ohne Umschreiben, zuweisen bei Wire.begin

Wenn jedoch weiter hin nichts angezeigt wird ist was Faul mit dem Ding

Oder mit der Installation. Das sehe ich eher.

Wir kennen nicht sehen was der TO auf dem Rechner hat.