Si vous ne cherchez pas à configurer un site Web majeur sur un service d’hébergement, vous pouvez facilement exécuter un serveur Web chez vous. Nous avons précédemment expliqué comment configurer un serveur Web Raspberry Pi en utilisant un Pi 3, 4 ou Zero ordinaire, mais vous n’avez même pas besoin d’un Pi complet pour faire le travail. Avec le Raspberry Pi PIco W, un microcontrôleur compatible Wi-Fi qui ne coûte que 6 $, vous pouvez effectuer un service Web de base.
La Framboise Pi Pico W n’est pas le choix le plus évident, mais avec un peu de code MicroPython et un peu de HTML, nous pouvons servir des pages Web statiques de base à partir d’un Pico W. Ce projet comporte deux parties. Le HTML et le code MicroPython. Le HTML est ce que notre navigateur verra, et MicroPython agit comme un moyen de servir le code.
Pour ce projet, nous hébergerons une page Web de base à partir d’un Raspberry Pi Pico W. Nous montrerons également comment ajouter un peu plus d’éclat à vos pages avec CSS et JavaScript. Enfin, nous servirons le contenu au monde entier en apprenant à transmettre des demandes externes à notre Raspberry Pi Pico W.
Pour ce projet, vous aurez besoin
HTML pour le serveur Web Raspberry Pi Pico W
HyperText Markup Language (HTML) est le bloc de construction de base pour le Web. Le langage est un framework pour créer des pages web, un framework qui a depuis été mis à jour et amélioré pour des sites plus modernes.
Le code HTML de notre serveur Web Pico W peut être aussi simple ou compliqué que vous le souhaitez, mais il y a quelques mises en garde à prendre en compte. Le code HTML du site est chargé dans une variable Python, ce qui signifie que nous ne pouvons pas aller trop loin avec les fonctionnalités car le Pico W ne dispose que de 264 Ko de SRAM. Deuxièmement, nous ne pouvons pas servir d’images ou de fichiers de référence (CSS/JavaScript) sur le Pico W car nous chargeons à nouveau le HTML dans une variable Python qui ne peut pas accéder au système de fichiers.
Cela signifie que toutes les images ou CSS/JavaScript devront être accessibles à partir d’un site distant. CSS et JavaScript dans le code HTML fonctionneront, mais nous préférons référencer Bootstrap CSS et JavaScript via son CDN.
Pour créer une page HTML de base
1. Ouvrez un éditeur de texte de votre choix. Le bloc-notes est amplement suffisant, mais notre préférence est Notepad ++.
2. Définissez le type de document sur HTML, puis créez une balise html. Cela indique au navigateur que la page est écrite en HTML, et la balise indique le début du document HTML.
<!DOCTYPE html>
<html>
3. Créez une nouvelle balise, , et à l’intérieur de la tête, utilisez
<head>
<title>Tom's Hardware Pico W Web Server</title>
</head>
4. Créez une section . Il s’agit de la section où le contenu visible par l’utilisateur est affiché.
<body>
5. Créez un titre en utilisant la balise
et donnez à votre page un titre / titre. Il s’agit de la plus grande balise de titre.
<h1>Tom's Hardware Pico W Web Server</title>
<h1>Tom's Hardware Pico W Web Server</title>
6. Ajoutez un autre titre en utilisant
et donnez un nom à la section. Dans notre exemple, il s’agit de « Les dernières nouvelles ». La balise
est plus petite que
mais elle souligne quand même qu’il s’agit d’une nouvelle section.
<h2>The Latest News</h2>
mais elle souligne quand même qu’il s’agit d’une nouvelle section.
<h2>The Latest News</h2>
<h2>The Latest News</h2>
sept. Insérez une image, liée à partir d’un CDN distant, en utilisant la balise . Nous avons besoin de l’URL complète de l’image que nous souhaitons utiliser, en nous assurant que nous avons également l’autorisation d’utiliser l’image. Dans notre exemple, nous utilisons une image de Pexels.com, un service d’images sous licence gratuite. Les images peuvent être redimensionnées à l’aide de la balise . Nous pouvons spécifier la taille en pourcentage de sa taille d’origine, ou nous pouvons coder en dur la taille en pixels.
<img src="https://images.pexels.com/photos/1779487/pexels-photo-1779487.jpeg?cs=srgb&dl=pexels-designecologist-1779487.jpg", width=640px height=427px>
8. Utilisez la balise
pour créer un paragraphe de texte. Pour notre démo, nous avons utilisé deux paragraphes de Lorem Ipsum générés à l’aide d’un Générateur de Lorem Ipsum.
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit…..</p>
9. Fermez enfin le corps puis le document HTML.
</body>
</html>
dix. Enregistrez le fichier sous index.html.
Pour l’instant gardez le code dans ce fichier, nous l’utiliserons plus tard.
Code Python pour le serveur Web Raspberry Pi Pico W
Nous avons créé une page pour nos lecteurs avides, et maintenant nous devons créer un moyen de la leur servir. Pour cela, nous allons créer une courte application MicroPython qui lira le contenu de notre fichier index.html et le servira de page Web.
1. Suivez ce guide pour configurer votre Raspberry Pi Pico W. Suivez les étapes jusqu’à « Comment faire clignoter une LED ».
2. Créez un nouveau fichier vierge.
3. Importez deux modules. Le premier est socket, une interface réseau de bas niveau. Le second est le réseau, que nous utiliserons pour nous connecter à notre point d’accès Wi-Fi.
import socket
import network
4. Créez un objet, une page et utilisez-le pour référencer le fichier HTML sur notre Pico W. Cela ouvrira le fichier en mode lecture seule.
page = open("index.html", "r")
5. Lisez le contenu du fichier dans un nouvel objet, html, puis fermez le fichier. Cela lira tout le code HTML dans l’objet html.
html = page.read()
page.close()
6. Créez un objet, wlan, et utilisez-le pour créer une connexion entre notre code et la puce Wi-Fi du Pico W.
wlan = network.WLAN(network.STA_IF)
sept. Activez le Wi-Fi puis connectez-vous à votre point d’accès avec votre mot de passe.
wlan.active(True)
wlan.connect("ACCESS POINT","PASSWORD")
8. Créez un objet, sta_if, qui servira d’interface entre le Pico W et le point d’accès Wi-Fi.
sta_if = network.WLAN(network.STA_IF)
9. Imprimez l’adresse IP du Pico W, notez l’adresse IP car nous en aurons besoin plus tard. Les données renvoyées sont un objet de liste qui contient notre adresse IP, notre masque de réseau et l’adresse du serveur DHCP. L’adresse IP est le premier élément de la liste, donc en utilisant [0] nous pouvons le renvoyer de la liste sans aucune autre information.
print(sta_if.ifconfig()[0])
dix. Réglez le Pico W pour qu’il écoute les connexions sur le port 80 à partir de n’importe quelle adresse IP. Nous utilisons socket.SO_REUSEADDR pour activer la même adresse IP à utiliser après une réinitialisation. Cela résout un problème où le Pico W aurait besoin d’une mise hors tension complète afin de réutiliser l’adresse IP.
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(addr)
s.listen(1)
11. Créez une boucle pour exécuter en continu la section de code suivante.
while True:
12. Configurer le Pico W pour accepter une connexion et pour créer un fichier qui deviendra notre page Web.
cl, addr = s.accept()
cl_file = cl.makefile('rwb', 0)
13. Créez une autre boucle, et à l’intérieur de la boucle créez un objet, ligne, pour lire le contenu de notre page Web, ligne par ligne.
while True:
line = cl_file.readline()
14. Utilisez une instruction conditionnelle pour arrêter la lecture du contenu s’il y a des retours chariot ou des sauts de ligne.
if not line or line == b'rn':
break
15. Créer un objet, response, dans lequel on stocke le HTML pour la page Web.
response = html
16. Configurez une réponse client qui envoie le code d’état HTTP et le type de contenu au navigateur, alors répond avec le HTML à rendre dans leur navigateur. La connexion est alors déconnectée.
cl.send('HTTP/1.0 200 OKrnContent-type: text/htmlrnrn')
cl.send(response)
cl.close()
17. Enregistrez le fichier sur le Raspberry Pi Pico W sous main.py. En faisant cela, le code s’exécutera automatiquement au démarrage du Pico W.
Liste complète des codes MicroPython
import socket
import network
page = open("index.html", "r")
html = page.read()
page.close()
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("ACCESS POINT","PASSWORD")
sta_if = network.WLAN(network.STA_IF)
print(sta_if.ifconfig()[0])
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(addr)
s.listen(1)
while True:
cl, addr = s.accept()
cl_file = cl.makefile('rwb', 0)
while True:
line = cl_file.readline()
if not line or line == b'rn':
break
response = html
cl.send('HTTP/1.0 200 OKrnContent-type: text/htmlrnrn')
cl.send(response)
cl.close()
Copie de index.html sur le Raspberry Pi Pico W
1. Dans Thonny, cliquez sur Afficher >> Fichiers. Cela ouvrira un gestionnaire de fichiers. La fenêtre du haut est la source, dans ce cas le lecteur principal de notre PC. La fenêtre du bas est la cible, le Raspberry Pi Pico W.
2. Dans la fenêtre du haut, accédez à l’emplacement de votre fichier index.html.
3. Faites un clic droit sur index.html et sélectionnez « Télécharger vers / » pour copier le fichier sur votre Pico W.
4. Débranchez le Pico W de votre ordinateur, puis réinsérez-le pour redémarrer le Pico W et démarrer le serveur Web.
5. Sur votre PC, ouvrez une nouvelle fenêtre / un nouvel onglet de navigateur et accédez à l’adresse IP de votre Pico W. Après quelques instants, vous verrez la page apparaître dans la fenêtre.
Améliorer notre HTML
En utilisant Bootstrap et son CDN, nous avons créé une page beaucoup plus professionnelle. Cela utilise essentiellement les mêmes éléments de base
,
et , mais avec des fonctionnalités supplémentaires telles que des séparateurs et des CSS personnalisés.
Amorcer est un cadre pour HTML, CSS et JavaScript qui produit rapidement des sites d’aspect professionnel. Si vous souhaitez créer un site de démonstration rapide pour des clients ou vos propres projets, Bootstrap est un bon point de départ.
Nous avons adapté le Modèle de héros pour notre démo, en remplaçant les liens CSS et JavaScript pour Liens BootstrapCDN.
Si vous souhaitez utiliser notre code, il peut être téléchargé à partir d’ici.
Transfert des demandes vers notre serveur Web Raspberry Pi Pico W
À l’heure actuelle, notre serveur n’est accessible qu’aux appareils sur le même réseau. Pour partager notre serveur Web Raspberry Pi Pico W avec le monde, nous devons vérifier notre adresse IP externe et configurer la redirection de port pour envoyer des requêtes externes à notre Pico W.
Chaque routeur a un moyen subtilement différent d’effectuer ces tâches, nos étapes illustrent comment notre routeur fourni par notre FAI le gère.
1. Obtenez votre adresse IP externe. Utiliser le moteur de recherche de Google et rechercher « Quelle est mon adresse IP ? » et notez l’adresse IP.
2. Connectez-vous aux paramètres avancés de votre routeur et sélectionnez Réservation DHCP. Nous devons nous assurer que notre Pico W a une adresse IP statique sur le LAN, et la réservation DHCP est un moyen de le faire.
3. Sélectionnez votre Pico W dans la liste des appareils connectés.
4. Ajoutez la réservation au tableau de bail IP, puis cliquez sur Appliquer. Cela garantira que votre Pico W reçoit la même adresse IP chez vous.
5. Accédez au menu Redirection de port sur votre routeur. Dans notre cas, c’était sous Paramètres avancés >> Redirection de port.
6. Définissez le service sur HTTP (port 80) et créer une règle pour le trafic HTTP. Définissez le port de début et de fin sur 80, le protocole sur TCP et définissez l’adresse IP à celle de votre Pico W. sauvegarder puis appliquer la règle.
sept. Sur un autre appareil, connecté via un autre réseau (cellulaire) ouvrez le navigateur et accédez à votre adresse IP externe. Vous verrez maintenant la page Web servie via votre Pico W.