Comment éditer le fichier custom_port.cpp

Questions sur les codes officiels du core arpschuino
Questions about official codes from arpschuino core
Alchypit
Messages : 12
Enregistré le : jeu. 21 déc. 2023 14:14

Comment éditer le fichier custom_port.cpp

Message par Alchypit »

Bonjour,

Je utilise les ports A et B de mon arpschuino32 de deux façon différentes : Port A pour 4 moteurs pas a pas et Port B pour 8 sorties PWM
Je règle tout ceci dans le serveur web et tout fonctionne parfaitement. D'ailleurs, bravo pour vos cartes.

Je viens ici vous demander des explication sur l édition du fichier custom_port.cpp car sur mon Port B je n est besoin que de 2 sorties PWM et j'aurai besoin d'une sortie on_off pour piloter un relai.

J'ai bien compris que c'était le fichier custom_port.cpp qu'il fallait éditer en s'inspirant de port.cpp. Mais je ne cerne pas la logique étant un piètre codeur...je me débrouille sur arduino ide en copiant/collant grâce aux exemples...mais la...pas trop d exemples...

Je vois différentes fonctions : Setup port A/B , main loop A/B, Action A/B mais j ai pas la syntaxe dans les doigts...

Une bonne âme pour me montrer comment faire pour cet exemple?

Port A : 4 stepper
Port B : 4 sortie Pwm et 4 sorties On_Off

Bonne journée à tous.


Alchypit
Jacques
Messages : 268
Enregistré le : dim. 31 oct. 2021 19:37

Re: Comment éditer le fichier custom_port.cpp

Message par Jacques »

C’est vrais que nous n’avons pas encore fait de tuto pour le custom port. C’est prévu, ce topic va en être l’ébauche.

Donc, pour une fonctionnalité personnalisée du portA ou B, on devra éditer le fichier Custom_port.cpp. Ne touchez à aucun autre fichier pour ne pas risquer de perturber le fonctionnement général du firmware.
Rappelons qu’il est nécessaire d’installer Vs-code sur votre ordinateur, puis le plugin platformIO dans VS-code.
La suite ne sera pas très différente de ce qu’on ferait avec un code arduino standard.

Code : Tout sélectionner

//////////// port A //////////////
/*Mettre ici (avant le setup):
    • Le #includes.
    • Les bibliothèques (librarys).
    • Les variables globales.
    • les prototypes de fonction.*/

void setupA()   //this loop is executed once at startup
{   
  portA.setNbDmxChannels(8);
//Il est dans tous les cas nécessaire de renseigner ici le nombre de circuits utilisés (ici 8).
//Ensuite, on vas faire tous ce qu’on ferait dans la boucle setup() d’un code arduino standard. Par exemple :
pinMode(Arp[0], OUTPUT);
//Pour initialiser Arp0 en sortie. Ou :
  for(int i=0;i<8;i++){
    pinMode(Arp[i], OUTPUT);
  }
//Pour initialiser les broches Arp0 à Arp7 en sortie.
}

void action_A(const std::vector<uint8_t> & DMXslice)  //this loop is executed at each signal reception
{
	//Mettre ici l’action à exécuter à chaque réception d’une trame DMX (ou artnet).
}

void at_each_loop_A()   //this loop is executed continuously
{
	 //Équivalent à la boucle loop() d’un code arduino standard.
}
A suivre !!
Dis moi déjà si tout est clair pour toi.
Jacques
Messages : 268
Enregistré le : dim. 31 oct. 2021 19:37

Re: Comment éditer le fichier custom_port.cpp

Message par Jacques »

J'ai commencé à écrire le tuto custom port, voici le premier jet du début :
Custom port :

Le custom port de l’arpschuino32 permet de personnaliser les fonctionnalités d’un ou des deux ports de l’arpschuino32 ou de la wilulu32. On peut, sans toucher à l’architecture globale du firmware, coder le comportement d’un port comme on le ferait pour un code Arduino simple.
Nous n’utiliserons par contre pas l’IDE Arduino qui ne conviens pas pour un code comme notre firmware qui contiens plusieurs langages (C++, HTML, Javascript, CSS).

Il faudra donc installer Vscode et platformIO. La bonne nouvelle, c’est que vous n’aurez ensuite pas à vous soucier d’installer des librairies ou autre, platformIO s’occupera de tout, automatiquement.

Commençons donc par Vscode. On télécharge la dernière version ici
https://code.visualstudio.com/Download
On choisi bien sur la version adapté à son système et on l’installe normalement, on peut laisser les paramètres par défaut.
Une foi Vscode installé, on l’ouvre et on clique sur extension.
Image
Dans la boite de recherche d’extension, on tape platformIO IDE. Une icône à tête de fourmis devrait apparaître, il ne reste plus qu’à cliquer sur install et attendre… C’est prêt !

Si vous ne l’avez pas encore fait, téléchargez la dernière version du firmware arpschuino32 ou Wilulu32.
https://arpschuino.fr/telechargements.php#codes
Une foi le dossier dézippé, si vous cliquez droit dessus vous devriez avoir l’option ouvrir avec code. Si ce n’est pas le cas, ce n’est pas grave, ouvrez Vscode, aller dans file/open folder (ou fichier/ouvrir un dossier si vous êtes en français). On va vous demander si vous faite confiance aux auteurs, c’est nous donc cliquez oui si vous nous faites confiance !
Bienvenue dans le code source d’arpschuino32 ! Comme vous pouvez le voir, il y a beaucoup de choses, on a pas chômé ! On va s’intéresser à un fichier en particulier : custom port.cpp (ne touchez pas au autres fichiers sauf si vous savez vraiment ce que vous faites!).
C'est tout pour l'instant, n'hésitez pas à me corriger ou à me dire si quelque chose n'est pas clair. Je posterai la suite au fur et à mesure des avancées.
Alchypit
Messages : 12
Enregistré le : jeu. 21 déc. 2023 14:14

Re: Comment éditer le fichier custom_port.cpp

Message par Alchypit »

Bonjour Bonjour,

Merci pour ce démarrage de Tuto !

C est clair, j ai installé Vscode et Plateform io....réussi à mettre blink dans un Arduino nano et dans un Wemos d1 mini, et dans un arduino pro mini

j ai importé le core arpschuino 32 1.2.3 jusque là tout va bien.

Apparemment j'ai pas toutes les dépendances et autre include...

Je rame un peu car je connais pas vscode ni plateforme io, j ai bien regardé quelque Tutos mais j arrive pas à ajouter manuellement les choses qui paraissent manquantes...d'ailleur si j'ai bien compris rien ne devrait manquer vu que le projet est nomade et que toutes les librairies sont dans le core arpschuino...


.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/vfs/include introuvable
.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/tcpip_adapter/include introuvable
.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/spi_flash/include introuvable
.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/include introuvable
.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/port/include introuvable
.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/esp_supplicant/include introuvable
.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/unity/include introuvable
.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/unity/unity/src introuvable
.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/tcp_transport/include introuvable
.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wear_levelling/include introuvable
.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wifi_provisioning/include introuvable
.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ws2812_led introuvable
.platformio/packages/framework-arduinoespressif32/variants/doitESP32devkitV1 introuvable


Je continu de regarder les tutos et je vais essayer de mettre blink dans un esp 32...à suivre

Bonne journée
Alchypit
Messages : 12
Enregistré le : jeu. 21 déc. 2023 14:14

Re: Comment éditer le fichier custom_port.cpp

Message par Alchypit »

Suite...

je compile les codes pour pas mal de board mais pas moyen pour l esp32...problèmes de librairie...dépendances ou trucs du genre et je n'arrive pas à comprendre...ca doit pas être grand chose mais comme l'environement est nouveau pour moi...

Lorsque j'importe le projet arpschuino 1.2.3 dans plateform/io et que je compile voici le resultat :

-----------------------------------------------------------------------------------------------------------------------------------------------------------

Exécution de la tâche : C:\Users\Alchypit\.platformio\penv\Scripts\platformio.exe run

Processing esp32doit-devkit-v1 (platform: espressif32 @ ~6.0.0; board: esp32doit-devkit-v1; framework: arduino)
-----------------------------------------------------------------------------------------------------------------------------------------------------------Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards ... it-v1.html
PLATFORM: Espressif 32 (6.0.1) > DOIT ESP32 DEVKIT V1
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:
- framework-arduinoespressif32 @ 3.20006.221224 (2.0.6)
- tool-esptoolpy @ 1.40400.0 (4.4.0)
- toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 44 compatible libraries
Scanning dependencies...
Dependency Graph
|-- ESP Async WebServer @ 1.2.3
|-- AsyncTCP @ 1.1.1
|-- ArtNet @ 0.2.12
|-- ServoESP32 @ 1.0.3
|-- esp_dmx @ 2.0.2
|-- Adafruit PWM Servo Driver Library @ 2.4.1
|-- ArpAccelStepper
|-- Arpschuino
|-- Preferences @ 2.0.0
|-- Wire @ 2.0.0
|-- ESPmDNS @ 2.0.0
|-- HTTPClient @ 2.0.0
|-- Update @ 2.0.0
|-- WiFi @ 2.0.0
|-- SPIFFS @ 2.0.0
|-- arpschuino32_core
Building in release mode
Compiling .pio\build\esp32doit-devkit-v1\src\Custom_port.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\src\I2C_port.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\src\Port.cpp.o
In file included from C:/Users/Alchypit/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/FreeRTOSConfig_arch.h:103,
from C:/Users/Alchypit/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions/freertos/FreeRTOSConfig.h:79,
from C:/Users/Alchypit/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/freertos/FreeRTOS.h:57,
from C:/Users/Alchypit/.platformio/packages/framework-arduinoespressif32/cores/esp32/Arduino.h:33,
from src/global.h:3,
from src/custom_port.h:4,
from src/Custom_port.cpp:3:

C:/Users/Alchypit/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/xtensa_config.h:40:10: fatal error: xtensa/hal.h: No such file or directory
#include <xtensa/hal.h>
^~~~~~~~~~~~~~
compilation terminated.
In file included from C:/Users/Alchypit/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/FreeRTOSConfig_arch.h:103,
from C:/Users/Alchypit/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions/freertos/FreeRTOSConfig.h:79,
from C:/Users/Alchypit/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/freertos/FreeRTOS.h:57,
from C:/Users/Alchypit/.platformio/packages/framework-arduinoespressif32/cores/esp32/Arduino.h:33,
from src/I2C_port.h:2,
from src/I2C_port.cpp:1:

C:/Users/Alchypit/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/xtensa_config.h:40:10: fatal error: xtensa/hal.h: No such file or directory
#include <xtensa/hal.h>
^~~~~~~~~~~~~~
compilation terminated.
In file included from C:/Users/Alchypit/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/FreeRTOSConfig_arch.h:103,
from C:/Users/Alchypit/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions/freertos/FreeRTOSConfig.h:79,
from C:/Users/Alchypit/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/freertos/FreeRTOS.h:57,
from C:/Users/Alchypit/.platformio/packages/framework-arduinoespressif32/cores/esp32/Arduino.h:33,
from src/global.h:3,
from src/port.cpp:1:

C:/Users/Alchypit/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/xtensa_config.h:40:10: fatal error: xtensa/hal.h: No such file or directory
#include <xtensa/hal.h>
^~~~~~~~~~~~~~
compilation terminated.

Compiling .pio\build\esp32doit-devkit-v1\src\_wifi.cpp.o
*** [.pio\build\esp32doit-devkit-v1\src\Custom_port.cpp.o] Error 1
*** [.pio\build\esp32doit-devkit-v1\src\I2C_port.cpp.o] Error 1
*** [.pio\build\esp32doit-devkit-v1\src\Port.cpp.o] Error 1

In file included from C:/Users/Alchypit/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/FreeRTOSConfig_arch.h:103,
from C:/Users/Alchypit/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions/freertos/FreeRTOSConfig.h:79,
from C:/Users/Alchypit/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/freertos/FreeRTOS.h:57,
from C:/Users/Alchypit/.platformio/packages/framework-arduinoespressif32/cores/esp32/Arduino.h:33,
from src/global.h:3,
from src/_wifi.cpp:1:

C:/Users/Alchypit/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/xtensa_config.h:40:10: fatal error: xtensa/hal.h: No such file or directory
#include <xtensa/hal.h>
^~~~~~~~~~~~~~
compilation terminated.

*** [.pio\build\esp32doit-devkit-v1\src\_wifi.cpp.o] Error 1
=============================================================== [FAILED] Took 10.89 seconds ===============================================================
* Arrêt du processus de terminal "C:\Users\Alchypit\.platformio\penv\Scripts\platformio.exe 'run'". Code de sortie : 1.
* Le terminal sera réutilisé par les tâches, appuyez sur une touche pour le fermer.


------------------------------------------------------------------------------------------------------------------------------------------------------------------

J'ai bien esayer d'ajouter hal.h dans pas mal de dossier xtensa que j ai croisé...vu que je sais pas trop quoi faire d autre, l erreur dans google me donnant pas de resultat clair pour moi...et toujours pareil

apparament, xtensa_config.h appel xtensa/hal.h mais il trouve pas hal.h....

je continu mes recherches... :D
Alchypit
Messages : 12
Enregistré le : jeu. 21 déc. 2023 14:14

Re: Comment éditer le fichier custom_port.cpp

Message par Alchypit »

Bonjour,

J'ai réglé mon problème, réinstaller Framework et réimporter le projet et j'ai pu compiler et téléversé dans un esp32 wroom la version arpschuino 32 1.2.3.

Je n'arrive pas à me connecter au serveur web 192.168.4.1, le pt d accès ne tiens pas.

Je n'est pas les cartes arpschuino32 sous la main je fait des tests avec une carte de prototypage esp32 wroom2. En tout les cas le pt d accès existe, je m y connecte mais pas d accès au serveur web, l esp32 recoit la requête http car il clignote à chaque demande d actualisation du navigateur. Bref la programmation fonctionne !

Je suis prêt pour modifier le fichier CUSTOM_PORT.CPP :D !

Ok pour la déclaration des sorties avec le for... mais je ne sais pas comment m y prendre pour mettre 2 sortie pwm et 2 onoff sur le port B...

je creuse, à suivre...

Bonne fêtes

Alchypit :D
Jacques
Messages : 268
Enregistré le : dim. 31 oct. 2021 19:37

Re: Comment éditer le fichier custom_port.cpp

Message par Jacques »

OK, donc ça ne compilait pas, réinstallation et là ça marche !
Étrange, je ne saurait t'expliquer pourquoi mais l'essentiel c'est que ça fonctionne !
Si le point d’accès est capricieux, essaie la méthode avec rescue :
http://arpschuino.fr/connect-arpschuino32.php#4
Je continue le tuto dans les jours qui viennent.
Jacques
Messages : 268
Enregistré le : dim. 31 oct. 2021 19:37

Re: Comment éditer le fichier custom_port.cpp

Message par Jacques »

Bon voici la suite, sous forme de PDF.
Bonne année !
Fichiers joints
tuto_custom.zip
(60.94 Kio) Téléchargé 31 fois
Alchypit
Messages : 12
Enregistré le : jeu. 21 déc. 2023 14:14

Re: Comment éditer le fichier custom_port.cpp

Message par Alchypit »

Super merci !

Je vais essayer de modifier le code pour faire les 4 dernières sorties du port A en mode PWM.

Bonne journée
Alchypit
Messages : 12
Enregistré le : jeu. 21 déc. 2023 14:14

Re: Comment éditer le fichier custom_port.cpp

Message par Alchypit »

Voici mon premier jet...

Code : Tout sélectionner

void action_A(const std::vector<uint8_t> & DMXslice)    //this loop is executed at each signal reception
{  

uint16_t m_target_level[4];

for (int i = 0; i < 4; ++i)   ///action pour les sortie PWM, DMX 16 bits avec courbes pour leds///
{
m_target_level[i] = DMXslice[i * 2] << 8 | DMXslice[i * 2 + 1];                     // level= DMXslice[i*2] << 8 | DMXslice[i*2+1];
uint32_t level32 = ((m_target_level[i] + 1) * (m_target_level[i] + 1)) - 1;  // uint32_t level32 =((level+1)*(level+1))-1;
m_target_level[i] = level32 >> (32 - 14);                                                // level = level32 >>(32-m_pwmRes); // 14 bits résolution optimale

analogWrite(Arp[i], m_target_level[i]);                                              // écrit en sortie analogique la valeur de m_target_level[i] 
}

for (int i = 4; i < 8; ++i)   ///action pour les sortie ONOFF///
{
if (DMXslice[i] > 127)
{
digitalWrite(Arp[i], HIGH);
}
else
{
digitalWrite(Arp[i], LOW);
}
}

}

void at_each_loop_B()   //this loop is executed continuously
{
   // nothing to do !....
}
#endif
Si j'ai bien compris on ajoute les variables dans custom_port.h si besoin ?

J'ai mis direct des valeurs sans passer par des variables.

Donc un fois programmé, on configure la carte sur son serveur web en mode custom_port et c est bon ?

Pour le port B je veux 4 moteur pas a pas, comment spécifier le mode de fonctionnement ?
je veux faire du continu.
Dans l'exemple du fichier originel custom_port.cpp je comprends les réglages vitesse min/max et accélération mais pour le mode de fonctionnement ? continu ou position)
stepper.moveTo permet de partir d une position et d aller à l autre et stepper.move permet de faire du continu ?

Comment préciser sur quelle stepper on agit ? stepper1.move / stepper2.move ect...?

Bon je pose beaucoup de questions... :roll:

Merci par avance

Bonne journée
Répondre