Autor Thema: SIGNALESP: Firm- und Hardware für SIGNALduino direkt auf ESP8266 oder ESP32  (Gelesen 52433 mal)

Offline spi3845

  • Full Member
  • ***
  • Beiträge: 110
ich entwickele unter Visual Studio.

In wieweit dir das für Visual Studio Code hilft weiss ich nicht.
Aber vermutlich unter Windows? Gibt es da alternative Möglichkeiten, den Code zu exportieren, um es in andere Entwicklungsumgebungen zu laden?

Ich hatte mit dem ESP32 auch mal ein wenig experimentiert, es dann aber aus den Augen verloren.
Daher wollte ich den Code mal in VScode laden und testen, wie weit es für den ESP32 compiliert. Ein ESP8266 ist schnell bestellt, habe hier aber noch einige ESP32 rumliegen...

Grüße zurück...
« Letzte Änderung: 07 Oktober 2019, 22:07:46 von spi3845 »

Offline Sidey

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2535
Ich kenne mich nicht exakt mit Visual Code aus.

Vermutlich musst Du nur die Dateien aus https://github.com/RFD-FHEM/SIGNALDuino/tree/dev-r33_reducedMinMessageLen/src/_micro-api/libraries  in das passende Verzeichnis kopieren in dem Visual Code die Bibliotheken einbinden kann.

Es gibt
https://github.com/RFD-FHEM/SIGNALDuino/blob/dev-r33_reducedMinMessageLen/SIGNALESP.ino
und
https://github.com/RFD-FHEM/SIGNALDuino/blob/dev-r33_reducedMinMessageLen/SIGNALDuino.ino

Beide sollten Arduino Typisch in eine cpp Datei kopiert werden. Darum solltest Du dich nicht kümmern müssen.
In der SIGNALESP findest sich ein IFDEF ES8266, das müsste vermutlich um ein ESP32 (oder wie auch immer es genau definiert ist) erweitert werden.


Die Bezeichnung ICACHE_RAM_ATTR weicht beim ESP32 etwas ab. Dafür sind dann noch ein paar defines notwendig.

An mehr kann ich mich leider nicht erinnern.
Wenn Du es erweiterst, wäre es toll wenn Du später einen Pull Request mit den Anpassungen machen könntest.

Grüße Sidey
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa

Offline spi3845

  • Full Member
  • ***
  • Beiträge: 110
Vermutlich musst Du nur die Dateien aus https://github.com/RFD-FHEM/SIGNALDuino/tree/dev-r33_reducedMinMessageLen/src/_micro-api/libraries  in das passende Verzeichnis kopieren in dem Visual Code die Bibliotheken einbinden kann.
Das war auch mein Gedanke. Werde es die Tage mal versuchen. Danke für den Tipp!

In der SIGNALESP findest sich ein IFDEF ES8266, das müsste vermutlich um ein ESP32 (oder wie auch immer es genau definiert ist) erweitert werden.

Die Bezeichnung ICACHE_RAM_ATTR weicht beim ESP32 etwas ab. Dafür sind dann noch ein paar defines notwendig.
Im Wiki wird nur auf den ESP8266 verwiesen, hier im Titel des Thread auch auf den ESP32. Nutzt den bereits jemand und hat Erfahrungen damit gesammelt?

An mehr kann ich mich leider nicht erinnern.
Wenn Du es erweiterst, wäre es toll wenn Du später einen Pull Request mit den Anpassungen machen könntest.

Grüße Sidey
Ich werde berichten  :)


Update 1:
Habe in Visual Studio Code mit Platform IO unter Linux ein neues Projekt angelegt und die die .ino-Datei in die src/main.cpp kopiert.
Die Libraries unter src/_micro-api/libraries habe ich in das VScode-Projektverzeichnis/lib kopiert. WIFIManager musste ich zusätzlich per git clonen (und dann den Namen des Verzeichnisses umbenennen), weil das Verzeichnis nach dem ursprünglichen git clone leer blieb.

In der main.cpp musste ich etwas die Reihenfolge der Funktionen und Definitionen ändern, weil VScode meckert, wenn etwas genutzt, die Deklaration aber erst später erfolgt.

Die platformio.ini sieht so aus:
[env:test]
platform = espressif8266
board = nodemcuv2
framework = arduino
monitor_speed = 115200
upload_port = /dev/ttyUSB0
upload_speed = 921600
monitor_port = /dev/ttyUSB0
monitor_speed = 115200
lib_archive = false
lib_deps =

Das schöne am VScode ist, dass es übersichtlicher ist als Arduino IDE und durch die platformio.ini die Projekte einfach weitergegeben werden können - in der IDE sind keine Einstellungsarbeiten für das Board zu ändern, da an jedem Projekt eine eigene platformio.ini hängt. Werbung Ende.

Damit kann ich das schon mal in VScode für einen ESP8266 kompilieren. Jetzt kommen die Tests für den ESP32...
« Letzte Änderung: 08 Oktober 2019, 14:11:25 von spi3845 »

Offline Ranseyer

  • Hero Member
  • *****
  • Beiträge: 1727
    • Homepage
Dass sich damit mal jemand befasst ist sehr cool. Du kannst allerdings die Libs auch in der platformio.Ini definieren. Somit kann direkt nach dem Herunterladen kompiliert werden.

Ps: Da ich unterwegs bin, ohne Links oder Beispiele...
FHEM mit FTUI. Homematic-Funk für Thermostate und Licht. MySensors als Basis für eigene HW.
Zentrale ist der MAPLE-CUL mit RFM69+HModUART-AddOn.
Doku zu meinen Projekten: Github/Ranseyer. Platinen falls verfügbar gerne auf Anfrage.
Support: gerne wenn ich Zeit+Lust habe im Forum. Nicht per PN!
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline spi3845

  • Full Member
  • ***
  • Beiträge: 110
Dass sich damit mal jemand befasst ist sehr cool. Du kannst allerdings die Libs auch in der platformio.Ini definieren. Somit kann direkt nach dem Herunterladen kompiliert werden.
Werbung an - das ist der weitere Vorteil von VScode und PlatformIO - Werbung aus. Daher möchte ich diese IDE nutzen und nicht die Arduino IDE.

Hatte vorher die alte Version von SignalESP erwischt, jede Menge Fehler beim compilieren für den ESP32. Werde es die Tage mit der neuesten nochmal versuchen.

Offline Mave

  • Sr. Member
  • ****
  • Beiträge: 669
An anderer Stelle im Raum läuft der SignalESP433 seit gestern ohne Unterbrechung...

Nachdem mein SignalESP433 an einer anderen Position im Wohnzimmer jetzt stabil zu laufen scheint, habe ich doch noch das Problem, dass er die Verbindung zum WLAN nicht mehr selbständig widerherstellt, wenn das WLAN mal kurz weg war.

Wie kann man dem ESP beibringen, dass er automatisch reconnected?

Offline spi3845

  • Full Member
  • ***
  • Beiträge: 110
Hatte vorher die alte Version von SignalESP erwischt, jede Menge Fehler beim compilieren für den ESP32. Werde es die Tage mit der neuesten nochmal versuchen.
Nach etwas Code hin- und hergeschiebe in Verzeichnissen kann ich https://github.com/RFD-FHEM/SIGNALDuino/tree/dev-r33_reducedMinMessageLen in VScode für ESP8266 kompilieren.

Compilieren für ESP32 wirft jede Menge Fehler, das fängt schon an mit cc1101.cpp, die für ESP8266 sauber kompiliert. Da muss es irgendwelche weiteren Abhängigkeiten in den Libraries geben. Werde mal schauen, ob ich in den kommenden Tagen Zeit finde, da weiter reinzusehen. Vielleicht ist der Kauf eines ESP8266 einfacher, hust  :D
« Letzte Änderung: 09 Oktober 2019, 13:39:00 von spi3845 »

Offline Sidey

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2535
Ich habe es gerade auf die schnelle getestet.

Der Compiler für den esp32 scheint hier tendenziell errors zu melden, was mit einem älteren compiler noch als warning durchging. :(



Grüße Sidey
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa

Offline Sidey

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2535
Hi spi3845


Ich habe mir das mal angesehen. Der Code compiliert so zumindest schon mal:

https://github.com/RFD-FHEM/SIGNALDuino/tree/dev-r33_prepare_release


Funktionieren wird er vermutlich nicht. Da müssten bestimmt die Pins noch angepasst werden.


Grüße Sidey
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa

Offline spi3845

  • Full Member
  • ***
  • Beiträge: 110
Ich habe mir das mal angesehen. Der Code compiliert so zumindest schon mal:

https://github.com/RFD-FHEM/SIGNALDuino/tree/dev-r33_prepare_release

Respekt, das nenne ich mal zackig...

Habe es getestet - ist wahrscheinlich meinem anderen VScode geschuldet, aber ich kann diesen Code (ich verteile die Dateien auf die entsprechenden VScode-Verzeichnisse und trage die libraries in die platfromIO.ini ein) jetzt weder für ESP8266 (Fehler wdt.h nicht gefunden), noch ESP32 (Fehler in Deklaration void ICACHE_RAM_ATTR cronjob(void *pArg);) kompilieren.

Funktionieren wird er vermutlich nicht. Da müssten bestimmt die Pins noch angepasst werden.
Das ist das kleinste Problem - danke, dass Du Dir den Code für ESP32 anschaust. Ich will hier aber nicht Mehraufwand generieren, bloss weil ich das testweise mal für einen ESP32 angeworfen habe. Ein ESP8266 ist schnell bestellt... Wenn aber generell Interesse besteht, das ganze auch auf einem ESP32 zum Laufen zu bringen, versuche ich gern zu unterstützen. Dazu müssten wir aber erst die Toolchain hinbekommen, sonst wird das mit dem Code austauschen schwierig. Da ich Linux einsetze, habe ich nur die Wahl zwischen der Espressif IDF, Visual Studio Code mit PlatformIO oder Arduino IDE.

Wenn Du unter Visual Studio entwickelst - welche Verzeichnisstruktur wird dort bei Dir für Source Code und Libraries erwartet?

VScode arbeitet mit
  • include für *.h
  • lib für Libraries (darin getrennt nach Unterverzeichnissen)
  • src für Source Code
  • platformio.ini zur Beschreibung des Boards und nötiger Libraries (hier kann man auch mehrere Baords definieren und durch Auswahl dann für das entsprechende Board kompilieren, ohne in irgendwelchen Einstellungsmenüs Änderungen durchführen zu müssen)

Offline Ranseyer

  • Hero Member
  • *****
  • Beiträge: 1727
    • Homepage
Ich finde das den richtigen Weg und würde falls Interesse besteht auch die nötige HW entwickeln und Platinen (OpenSource) für die aktiven Leute  kostenlos bereitstellen falls wir uns auf ein Konzept  dazu einigen...
FHEM mit FTUI. Homematic-Funk für Thermostate und Licht. MySensors als Basis für eigene HW.
Zentrale ist der MAPLE-CUL mit RFM69+HModUART-AddOn.
Doku zu meinen Projekten: Github/Ranseyer. Platinen falls verfügbar gerne auf Anfrage.
Support: gerne wenn ich Zeit+Lust habe im Forum. Nicht per PN!

Offline spi3845

  • Full Member
  • ***
  • Beiträge: 110
Ich finde das den richtigen Weg und würde falls Interesse besteht auch die nötige HW entwickeln und Platinen (OpenSource) für die aktiven Leute  kostenlos bereitstellen falls wir uns auf ein Konzept  dazu einigen...
Respekt - ich kenne mich etwas mit ESP32-Programmierung aus und habe für ESP32 mit Wifi- und Ethernet-Anbindung und MQTT entwickelt. Würde versuchen, einen bescheidenen Beitrag zu leisten.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 10972
  • eigentlich eher "user" wie "developer"
[in Teilen OT]
Beim ESP32 finde ich v.a. interessant, dass der auch gleich BT kann. Vielleicht läßt sich das in dem Zuge auch gleich mit einbinden?

Zum Hintergrund: Ich habe grade testweise einen ESP32 als Bluetooth-Scanner (firmware: OpenMQTTGateway) am Laufen, was aber noch recht witzlos ist, da ich gar keine passenden Tags habe (kommen erst noch), und die Handy's die passende Schnittstellen hätten die Adresse zu wechseln scheinen. Der Code kann aber angeblich zusätzlich noch diverse Xiaomi-BT-Geräte erkennen (Waagen, Pflanzensensoren - habe ich ebenfalls keine rumfliegen). Müßte man nur "umpacken" (oder via MQTT oä. gesondert versenden?)...

Gruß, Beta-User
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline Sidey

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2535
Respekt, das nenne ich mal zackig...

Habe es getestet - ist wahrscheinlich meinem anderen VScode geschuldet, aber ich kann diesen Code (ich verteile die Dateien auf die entsprechenden VScode-Verzeichnisse und trage die libraries in die platfromIO.ini ein) jetzt weder für ESP8266 (Fehler wdt.h nicht gefunden),
Den Fehler habe ich gestern eingebaut und jetzt wieder ausgebaut. :)

Bezüglich des Aufteilens der Verzeichnisse hat die Visual Micro Erweiterung für Visual Studio so seine Eigenheiten. Projektspezifische Bibliotheken lassen sich in src\_micro-api\libraries ablegen.
Entweder Du pflegst dieses Verzeichnis in den Include Pfad ein.

Vielleicht klappt das über die "c_cpp_settings.json" Datei:

            "includePath": [
...
                "${workspaceRoot}/src/_micro-api/libraries",
...
            ],

Das ganze Projekt wird auch automatisch mittels Travis CI und der Standard Arduino IDE compiliert.
Für die Arduino IDE habe ich die Bibliotheken einfach mittels Symbolischen Link eingebunden, vielleicht kannst Du dir auch so behelfen und das Projekt mittels symlinks in eine VS Code kompatible Struktur bringen:

https://github.com/RFD-FHEM/SIGNALDuino/blob/614fa70cbb07ef3de98b008020561ee6790f372d/.travis.yml#L22


 noch ESP32 (Fehler in Deklaration void ICACHE_RAM_ATTR cronjob(void *pArg);) kompilieren.

Diesen Fehler kann ich bei mir nicht nachstellen. Dazu bräuchte ich doch Details.
Die ESP32 Core Bibliotheken hast Du installiert? Das Macro ICACHE_RAM_ATTR wird dort definiert:
https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/esp8266-compat.h


Die Struktur ist grob wie folgt:

Im Hauptverzeichnis finden sich
SIGNALDuino.ino und SIGNALESP.ino, die werden zusammenkopiert.
Außerdem sind dort
cc1101.h
commands.h
compile_config.h
send.h
wifi-config.h
cc1101.cpp

abgelegt. Werden diese in VS Code ohne weitere Anpassungen gefunden?

Grüße Sidey
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa

Offline spi3845

  • Full Member
  • ***
  • Beiträge: 110
Den Fehler habe ich gestern eingebaut und jetzt wieder ausgebaut. :)
Werde ich testen...

Bezüglich des Aufteilens der Verzeichnisse hat die Visual Micro Erweiterung für Visual Studio so seine Eigenheiten. Projektspezifische Bibliotheken lassen sich in src\_micro-api\libraries ablegen.
Entweder Du pflegst dieses Verzeichnis in den Include Pfad ein.

Vielleicht klappt das über die "c_cpp_settings.json" Datei:

            "includePath": [
...
                "${workspaceRoot}/src/_micro-api/libraries",
...
            ],

Das ganze Projekt wird auch automatisch mittels Travis CI und der Standard Arduino IDE compiliert.
Für die Arduino IDE habe ich die Bibliotheken einfach mittels Symbolischen Link eingebunden, vielleicht kannst Du dir auch so behelfen und das Projekt mittels symlinks in eine VS Code kompatible Struktur bringen:

https://github.com/RFD-FHEM/SIGNALDuino/blob/614fa70cbb07ef3de98b008020561ee6790f372d/.travis.yml#L22
Ich schaue mal, ob ich das in VScode abgebildet bekomme. Es müsste aber so reibungslos funktionieren, dass mittels git die Änderungen geladen werden und es dann korrekt compiliert. Manuelles Umkopieren oder setzen von Links würde nur eine zusätzliche Fehlerquelle schaffen. Du nutzt Travis CI wie ein Makefile zum Compilieren?

Diesen Fehler kann ich bei mir nicht nachstellen. Dazu bräuchte ich doch Details.
Die ESP32 Core Bibliotheken hast Du installiert? Das Macro ICACHE_RAM_ATTR wird dort definiert:
https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/esp8266-compat.h
Der Fehler kann VScode geschuldet sein, weil das sehr pingelig bzgl. der Reihenfolge der Deklarationen. Der Fehler bei mir ist:
In file included from include/commands.h:17:0,
                 from src/main.cpp:62:
include/functions.h:27:0: warning: "ICACHE_RAM_ATTR" redefined
 #define ICACHE_RAM_ATTR
 ^
In file included from /home/sp/.platformio/packages/framework-arduinoespressif32/cores/esp32/Arduino.h:36:0,
                 from /home/sp/.platformio/packages/framework-arduinoespressif32/libraries/FS/src/FS.h:25,
                 from src/main.cpp:44:
/home/sp/.platformio/packages/framework-arduinoespressif32/cores/esp32/esp8266-compat.h:21:0: note: this is the location of the previous definition
 #define ICACHE_RAM_ATTR IRAM_ATTR
 ^
src/main.cpp:470:7: warning: extra tokens at end of #endif directive [-Wendif-labels]
 #endif;
       ^
src/main.cpp:22:22: error: expected initializer before 'cronjob'
 void ICACHE_RAM_ATTR cronjob(void *pArg);
                      ^
src/main.cpp:29:1: error: 'uint8_t' does not name a type
 uint8_t rssiCallback() { return 0; }; // Dummy return if no rssi value can be retrieved from receiver
 ^
src/main.cpp:30:1: error: 'size_t' does not name a type
 size_t writeCallback(const uint8_t *buf, uint8_t len);
 ^
src/main.cpp:31:22: error: expected initializer before 'sosBlink'
 void ICACHE_RAM_ATTR sosBlink(void *pArg);

Die Struktur ist grob wie folgt:

Im Hauptverzeichnis finden sich
SIGNALDuino.ino und SIGNALESP.ino, die werden zusammenkopiert.
Außerdem sind dort
cc1101.h
commands.h
compile_config.h
send.h
wifi-config.h
cc1101.cpp

abgelegt. Werden diese in VS Code ohne weitere Anpassungen gefunden?
Nö, alles muss umkopiert werden. Ich schaue mal, was sich mit Links oder zusätzlichen Ergänzungen in der Config erreichen lässt.

Update 1: Hallo Sidey,
ich habe mal als Attachment ein ganz einfaches Projekt in VScode angelegt. Kannst Du das so in Visual Studio importieren? Könntest Du auch bitte ein einfaches Projekt mit einer zusätzlichen Library in Visual Studio anlegen, per Travis kompilieren und das Projekt exportieren? Ich würde versuchen, es in VScode zu importieren und mit Links etc. die Umgebung so abbilden, dass es compiliert. Ich glaube, mit einem einfachen Beispiel klappt das schneller, als mit dem vollen SIGNALESP Code.

Grüße,
spi
« Letzte Änderung: 11 Oktober 2019, 16:53:22 von spi3845 »