Si no está buscando configurar un sitio web importante en un servicio de alojamiento, puede ejecutar fácilmente un servidor web en casa. Anteriormente hemos explicado cómo configurar un servidor web Raspberry Pi usando un Pi 3, 4 o Zero normal, pero ni siquiera necesita un Pi completo para hacer el trabajo. Con Raspberry Pi PIco W, un microcontrolador habilitado para Wi-Fi que cuesta solo $6, puede realizar un servicio web básico.
los Frambuesa Pi Pico W no es la opción más obvia, pero con algo de código MicroPython y algo de HTML, podemos servir páginas web estáticas básicas desde un Pico W. Hay dos partes en este proyecto. Código HTML y MicroPython. El HTML es lo que verá nuestro navegador, y MicroPython actúa como una forma de servir el código.
Para este proyecto, alojaremos una página web básica desde un Raspberry Pi Pico W. También mostraremos cómo agregar un poco de dinamismo adicional a sus páginas con CSS y JavaScript. Finalmente, serviremos contenido al mundo aprendiendo cómo pasar solicitudes externas a nuestra Raspberry Pi Pico W.
- Para este proyecto necesitarás
- HTML para servidor web Raspberry Pi Pico W
- y dale un nombre a la sección. En nuestro ejemplo, es "Las últimas noticias". La etiqueta es más pequeño que pero ella todavía señala que esta es una nueva sección.<h2>The Latest News</h2> siete. Inserte una imagen, vinculada desde un CDN remoto, usando la etiqueta . Necesitamos la URL completa de la imagen que queremos usar, asegurándonos de que también tenemos permiso para usar la imagen. En nuestro ejemplo, usamos una imagen de Pexels.com, un servicio gratuito de imágenes con licencia. Las imágenes se pueden cambiar de tamaño usando la etiqueta . Podemos especificar el tamaño como un porcentaje de su tamaño original, o podemos codificar el tamaño en píxeles.<img src="https://images.pexels.com/photos/1779487/pexels-photo-1779487.jpeg?cs=srgb&dl=pexels-designecologist-1779487.jpg", width=640px height=427px>8. Usa la baliza para crear un párrafo de texto. Para nuestra demostración, usamos dos párrafos de Lorem Ipsum generados usando un Generador Lorem Ipsum.<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit…..</p> (Crédito de la imagen: Hardware de Tom)9. Finalmente cierre el cuerpo y luego el documento HTML.</body> </html> diez. Guarde el archivo como index.html.Por ahora guarde el código en este archivo, lo usaremos más adelante.Código Python para el servidor web Raspberry Pi Pico W
- Lista completa de códigos MicroPython
- Copia de index.html en Raspberry Pi Pico W
- Mejorando nuestro HTML
- Reenvío de solicitudes a nuestro servidor web Raspberry Pi Pico W
Para este proyecto necesitarás
HTML para servidor web Raspberry Pi Pico W
El lenguaje de marcado de hipertexto (HTML) es el componente básico de la web. El lenguaje es un marco para crear páginas web, un marco que desde entonces ha sido actualizado y mejorado para sitios más modernos.
El código HTML para nuestro servidor web Pico W puede ser tan simple o complicado como desee, pero hay algunas advertencias que debe tener en cuenta. El HTML del sitio se carga en una variable de Python, lo que significa que no podemos exagerar con las funciones, ya que el Pico W solo tiene 264 KB de SRAM. En segundo lugar, no podemos servir imágenes o archivos de referencia (CSS/JavaScript) en el Pico W porque estamos recargando el HTML en una variable de Python que no puede acceder al sistema de archivos.
Esto significa que cualquier imagen o CSS/JavaScript deberá ser accesible desde un sitio remoto. CSS y JavaScript en HTML funcionarán, pero preferimos hacer referencia a Bootstrap CSS y JavaScript a través de su CDN.
Para crear una página HTML básica
1. Abra un editor de texto de su elección. El Bloc de notas es más que suficiente, pero nuestra preferencia es el Bloc de notas++.
2. Establezca el tipo de documento en HTML, luego cree una etiqueta html. Esto le dice al navegador que la página está escrita en HTML y la etiqueta indica el inicio del documento HTML.
<!DOCTYPE html>
<html>
3. Crear una nueva etiqueta, y dentro de la cabeza, use
<head>
<title>Tom's Hardware Pico W Web Server</title>
</head>
4. Crear una sección . Esta es la sección donde se muestra el contenido visible para el usuario.
<body>
5. Crear un título usando la etiqueta
y dale a tu página un título/título. Esta es la etiqueta de título más grande.
<h1>Tom's Hardware Pico W Web Server</title>
<h1>Tom's Hardware Pico W Web Server</title>
6. Agregue otro título usando
y dale un nombre a la sección. En nuestro ejemplo, es "Las últimas noticias". La etiqueta
es más pequeño que
pero ella todavía señala que esta es una nueva sección.
<h2>The Latest News</h2>
pero ella todavía señala que esta es una nueva sección.
<h2>The Latest News</h2>
<h2>The Latest News</h2>
siete. Inserte una imagen, vinculada desde un CDN remoto, usando la etiqueta . Necesitamos la URL completa de la imagen que queremos usar, asegurándonos de que también tenemos permiso para usar la imagen. En nuestro ejemplo, usamos una imagen de Pexels.com, un servicio gratuito de imágenes con licencia. Las imágenes se pueden cambiar de tamaño usando la etiqueta
. Podemos especificar el tamaño como un porcentaje de su tamaño original, o podemos codificar el tamaño en píxeles.
<img src="https://images.pexels.com/photos/1779487/pexels-photo-1779487.jpeg?cs=srgb&dl=pexels-designecologist-1779487.jpg", width=640px height=427px>
8. Usa la baliza
para crear un párrafo de texto. Para nuestra demostración, usamos dos párrafos de Lorem Ipsum generados usando un Generador Lorem Ipsum.
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit…..</p>
9. Finalmente cierre el cuerpo y luego el documento HTML.
</body>
</html>
diez. Guarde el archivo como index.html.
Por ahora guarde el código en este archivo, lo usaremos más adelante.
Código Python para el servidor web Raspberry Pi Pico W
Hemos creado una página para nuestros ávidos lectores, y ahora necesitamos crear una forma de brindársela. Para ello, crearemos una pequeña aplicación de MicroPython que leerá el contenido de nuestro archivo index.html y lo servirá como una página web.
1. Siga esta guía para configurar su Raspberry Pi Pico W. Siga los pasos hasta "Cómo hacer parpadear un LED".
2. Cree un nuevo archivo en blanco.
3. Importar dos módulos. El primero es socket, una interfaz de red de bajo nivel. El segundo es la red, que usaremos para conectarnos a nuestro punto de acceso Wi-Fi.
import socket
import network
4. Cree un objeto, una página y utilícelo para hacer referencia al archivo HTML en nuestro Pico W. Esto abrirá el archivo en modo de solo lectura.
page = open("index.html", "r")
5. Lea el contenido del archivo en un nuevo objeto, html, luego cierre el archivo. Esto leerá todo el HTML en el objeto html.
html = page.read()
page.close()
6. Cree un objeto, wlan, y utilícelo para crear una conexión entre nuestro código y el chip Wi-Fi del Pico W.
wlan = network.WLAN(network.STA_IF)
siete. Active Wi-Fi y luego conéctese a su punto de acceso con su contraseña.
wlan.active(True)
wlan.connect("ACCESS POINT","PASSWORD")
8. Cree un objeto, sta_if, que actuará como una interfaz entre Pico W y el punto de acceso Wi-Fi.
sta_if = network.WLAN(network.STA_IF)
9. Imprima la dirección IP de Pico W, anote la dirección IP, ya que la necesitaremos más adelante. Los datos devueltos son un objeto de lista que contiene nuestra dirección IP, máscara de red y dirección del servidor DHCP. La dirección IP es el primer elemento de la lista, por lo que usar [0] podemos descartarlo de la lista sin ninguna otra información.
print(sta_if.ifconfig()[0])
diez. Configure Pico W para escuchar conexiones en el puerto 80 desde cualquier dirección IP. Usamos socket.SO_REUSEADDR para permitir que se use la misma dirección IP después de un reinicio. Esto soluciona un problema por el cual el Pico W necesitaría un apagado total para poder reutilizar la dirección 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 Cree un bucle para ejecutar continuamente la siguiente sección de código.
while True:
12 Configurar Pico W para aceptar una conexión y para crear un archivo que se convertirá en nuestra página web.
cl, addr = s.accept()
cl_file = cl.makefile('rwb', 0)
13 Cree otro bucle, y dentro del bucle cree un objeto, línea, para leer el contenido de nuestra página web, línea por línea.
while True:
line = cl_file.readline()
14 Use una declaración condicional para detener la reproducción de contenido si hay retornos de carro o saltos de línea.
if not line or line == b'\r\n':
break
15. Crea un objeto, respuesta, en el que almacenamos el HTML para la página web.
response = html
dieciséis. Configure una respuesta de cliente que envíe el código de estado HTTP y el tipo de contenido al navegador, entonces responder con HTML para representar en su navegador. A continuación, se desconecta la conexión.
cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')
cl.send(response)
cl.close()
17 Guarde el archivo en Raspberry Pi Pico W como main.py. Al hacer esto, el código se ejecutará automáticamente cuando se inicie Pico W.
Lista completa de códigos 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'\r\n':
break
response = html
cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')
cl.send(response)
cl.close()
Copia de index.html en Raspberry Pi Pico W
1. En Thonny, haga clic en Ver >> Archivos. Esto abrirá un administrador de archivos. La ventana superior es la fuente, en este caso la unidad principal de nuestro PC. La ventana inferior es el objetivo, el Raspberry Pi Pico W.
2. En la ventana superior, navegue hasta la ubicación de su archivo index.html.
3. Haga clic derecho en index.html y seleccione "Descargar a /" para copiar el archivo a su Pico W.
4. Desconecte el Pico W de su computadora, luego reinsértelo para reiniciar Pico W e iniciar el servidor web.
5. En su PC, abra una nueva ventana/pestaña del navegador y navegue hasta la dirección IP de su Pico W. Después de unos momentos, verá que la página aparece en la ventana.
Mejorando nuestro HTML
Usando Bootstrap y su CDN creamos una página mucho más profesional. Esto básicamente utiliza los mismos elementos básicos.
,
y pero con características adicionales como separadores y CSS personalizado.
Principal es un marco para HTML, CSS y JavaScript que produce rápidamente sitios de apariencia profesional. Si desea crear un sitio de demostración rápida para clientes o sus propios proyectos, Bootstrap es un buen lugar para comenzar.
Hemos adaptado el modelo héroe para nuestra demostración, reemplazando los enlaces CSS y JavaScript para Enlaces BootstrapCDN.
Si desea utilizar nuestro código, puede ser descargado de aquí.
Reenvío de solicitudes a nuestro servidor web Raspberry Pi Pico W
Actualmente, nuestro servidor solo es accesible para dispositivos en la misma red. Para compartir nuestro servidor web Raspberry Pi Pico W con el mundo, debemos verificar nuestra dirección IP externa y configurar el reenvío de puertos para enviar solicitudes externas a nuestro Pico W.
Cada enrutador tiene una forma sutilmente diferente de realizar estas tareas, nuestros pasos ilustran cómo nuestro enrutador proporcionado por el ISP maneja esto.
1. Obtenga su dirección IP externa. Utilice el motor de búsqueda de Google y busque "¿Cuál es mi dirección IP?" y anote la dirección IP.
2. Inicie sesión en la configuración avanzada de su enrutador y seleccione Reserva DHCP. Necesitamos asegurarnos de que nuestro Pico W tenga una dirección IP estática en la LAN, y la reserva de DHCP es una forma de hacerlo.
3. Seleccione su Pico W de la lista de dispositivos conectados.
4. Agregue la reserva a la tabla de concesión de IP y haga clic en Aplicar. Esto asegurará que su Pico W reciba la misma dirección IP que usted.
5. Acceda al menú de reenvío de puertos en su enrutador. En nuestro caso, estaba en Configuración avanzada >> Reenvío de puertos.
6. Configure el servicio en HTTP (puerto 80) y crear una regla para el tráfico HTTP. Configure el puerto de inicio y finalización en 80, el protocolo en TCP y configure la dirección IP a la de tu Pico W. para salvaguardar luego aplicar la regla.
siete. En otro dispositivo, conectado a través de otra red (celular) abra el navegador y acceder a su dirección IP externa. Ahora verá la página web que se sirve a través de su dispositivo Pico W.
Deja una respuesta