Programme Powershell

Salut !

Ayant un esp32 et voulant créer un serveur web dessus, j'ai rencontré un souci (qui n'en est pas un dailleurs) qui est que pour créer la page web, elle doit avoir un formatage spécifique car elle codée au sein même du code de l'esp32 en C++.

Exemple :

client.println("<html>");
client.println("	<head>");
client.println("		<title>Systeme Ouverture Porte de Garage</title>");
client.println("	</head>");
client.println("	<body>");
client.println("		<h3>Ouvrir/Fermer :</h3>");
client.println("        <p>Porte de gauche :</p>");
client.println("        <p>Porte de droite :</p>");
client.println("	</body>");
client.println("</html>");

Mon âme de programmeur m'a rappelé que si je dois faire minimum 2 fois la même chose, c'est qu'il faut l'automatiser.

J'ai donc fait un petit programme en script Powershell pour automatiser tout ça :

clear

$lignes = (Get-Content in.txt | Measure-Object -Line).lines

If ((Test-Path out.txt) -eq $True)
{
    Remove-Item -Path out.txt
}

New-Item -Path out.txt -ItemType File
Write-host ""

For($i=0;$i -lt $lignes;$i++)
{
    $data = "client.println(`"" + (Get-Content in.txt | where { $_ -ne "$null" } | Select-Object -Index $i) + "`");"
    ADD-content -path out.txt -value $data
}

Get-Content out.txt

Voila si ça peut aider quelques uns qui programment sur ESP32 ^^

Qu'est-ce que c'est que ce shell ?

biggil:
Qu'est-ce que c'est que ce shell ?

C'est pas le nouveau shell de Windows?

Merci pour le partage !

Attention si votre code HTML contient des guillemets il faudra les "échapper" (mettre ")

il y a plus simple (outre mettre le fichier HTML dans le file system de votre ESP32):

vous utilisez les raw string literals de C++
==> vous mettez tous les codes HTML dans un onglet dédié à la page web, html.h, dans des variables en PROGMEM

const char p1_htm[] PROGMEM = R"xxxx(<html><head>
<title>Systeme Ouverture Porte de Garage</title></head>
<body>
<h3>Ouvrir/Fermer :</h3>
<p>Porte de gauche :</p>
<p>Porte de droite :</p>
</body></html>
)xxxx";

puis faire un #include "html.h" dans votre sketch. vous n'aurez alors plus qu'à faire un client.println((__FlashStringHelper *)  p1_htm);pour balancer tout le html d'un coup!

si vous voulez testez dans le moniteur série à 115200 bauds, testez ce code:

const char p1_htm[] PROGMEM = R"xxxx(<html><head>
<title>Systeme Ouverture Porte de Garage</title></head>
<body>
<h3>Ouvrir/Fermer :</h3>
<p>Porte de gauche :</p>
<p>Porte de droite :</p>
</body></html>
)xxxx";

void setup() {
  Serial.begin(115200);
  Serial.println(F("Le contenu HTML est"));
  Serial.println((__FlashStringHelper *) p1_htm);
}

void loop() {}

le moniteur série (à 115200 bauds) affichera

[color=purple]
Le contenu HTML est
<html><head>
<title>Systeme Ouverture Porte de Garage</title></head>
<body>
<h3>Ouvrir/Fermer :</h3>
<p>Porte de gauche :</p>
<p>Porte de droite :</p>
</body></html>
[/color]

gros avantage, vous n'avez pas besoin de mettre les \ devant les guillemets :slight_smile: et vous pouvez faire un copier coller direct de votre éditeur HTML

vous remarquerez que pour l'exemple j'ai tout mis dans le même fichier, ça fonctionne bien sûr mais le ctrl-T (cmd-T sur Mac) de l'indentation automatique ne fonctionne plus ensuite, c'est pour cela que c'est mieux de le mettre dans un autre onglet et en plus votre code sera plus simple à lire.

PS/ évitez d'envoyer du HTML formaté joliment avec tous les espaces d'indentation.... ça prend de la bande passante et de la mémoire pour rien dans votre Arduino, tous ces espaces n'étant pas pris en compte dans le navigateur... même les passages à la ligne ne sont pas nécessaire, vous pourriez envoyer tout le texte bien tassé:

<html><head><title>Systeme Ouverture Porte de Garage</title></head><body><h3>Ouvrir/Fermer :</h3><p>Porte de gauche :</p><p>Porte de droite :</p></body></html>

l'affichage sera le même...