{"id":17857742,"url":"https://github.com/raupulus/rpi-pico-simple-websockets-server","last_synced_at":"2026-04-13T11:01:24.343Z","repository":{"id":259658554,"uuid":"878815649","full_name":"raupulus/rpi-pico-simple-websockets-server","owner":"raupulus","description":"Proyecto para Raspberry Pi Pico con un ejemplo de servidor websocket para conectar desde otros dispositivos que hagan de cliente y recibir/enviar datos.","archived":false,"fork":false,"pushed_at":"2024-12-05T17:06:32.000Z","size":638,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-27T19:55:25.913Z","etag":null,"topics":["iot","maker","micropython","raspberry","raspberry-pi","raspberry-pi-pico","raspberrypi","raspberrypipico","server","websocket","websockets"],"latest_commit_sha":null,"homepage":"https://raupulus.dev/projects","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/raupulus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-26T07:20:57.000Z","updated_at":"2024-12-05T17:06:36.000Z","dependencies_parsed_at":"2024-10-27T06:33:51.272Z","dependency_job_id":"8b4e74d4-3d54-4e8d-918a-ee7789f33c24","html_url":"https://github.com/raupulus/rpi-pico-simple-websockets-server","commit_stats":{"total_commits":3,"total_committers":2,"mean_commits":1.5,"dds":"0.33333333333333337","last_synced_commit":"9f3aad552c06655acbb35124f6959271e887322d"},"previous_names":["raupulus/rpi-pico-simple-websockets-server"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/raupulus/rpi-pico-simple-websockets-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raupulus%2Frpi-pico-simple-websockets-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raupulus%2Frpi-pico-simple-websockets-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raupulus%2Frpi-pico-simple-websockets-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raupulus%2Frpi-pico-simple-websockets-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raupulus","download_url":"https://codeload.github.com/raupulus/rpi-pico-simple-websockets-server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raupulus%2Frpi-pico-simple-websockets-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31749763,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T09:16:15.125Z","status":"ssl_error","status_checked_at":"2026-04-13T09:16:05.023Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["iot","maker","micropython","raspberry","raspberry-pi","raspberry-pi-pico","raspberrypi","raspberrypipico","server","websocket","websockets"],"created_at":"2024-10-28T04:03:43.038Z","updated_at":"2026-04-13T11:01:24.323Z","avatar_url":"https://github.com/raupulus.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Raspberry Pi Pico Servidor de Websockets Básico\n\nEste repositorio contiene un ejemplo de servidor WebSocket para la Raspberry Pi Pico, de forma que podamos enviar y recibir datos desde/hacia nuestro equipo u otros dispositivos. Este servidor se puede utilizar para aplicaciones como leer sensores, actualizar información en una pantalla, o controlar dispositivos como LEDs, motores, y más, a través de una conexión WebSocket.\n\nUn ejemplo del uso que yo le di lo puedes ver aquí: [\"Pantalla para contador de pulsaciones usando WebSockets\"](https://youtu.be/Tvh2LaYt-_s)\n\nPuedes utilizar este código de ejemplo para adaptarlo a tu proyecto.\n\nSitio web del autor: [https://raupulus.dev](https://raupulus.dev)\n\n![Imagen del Proyecto](docs/images/img1.jpg \"Imagen Principal de Raspberry Pi Pico W\")\n\nRepositorio: [https://gitlab.com/raupulus/rpi-pico-simple-websockets-server](https://gitlab.com/raupulus/rpi-pico-simple-websockets-server)\n\n## ¿Qué es WebSocket?\n\nWebSocket es un protocolo de comunicación que proporciona un canal de comunicación full-duplex sobre una única conexión TCP. A diferencia de HTTP, que es un protocolo sin estado, WebSocket permite la comunicación bidireccional entre el cliente y el servidor en tiempo real.\n\nEn este proyecto, el servidor WebSocket corre en la Raspberry Pi Pico, permitiendo que otros dispositivos (como tu PC o teléfono) se conecten al servidor y envíen/reciban datos para interactuar con la Raspberry Pi Pico.\n\n## Funcionalidad del Proyecto\n\nEste proyecto incluye un servidor WebSocket básico que:\n\n- Recibe comandos JSON para encender o apagar LEDs conectados a la Raspberry Pi Pico.\n- Los LEDs son controlados a través de las funciones `led_on()` y `led_off()` de la clase `RpiPico`, que pueden controlar el LED integrado, el LED 1 (GPIO 1) o el LED 2 (GPIO 2).\n\n### Casos de Uso\n\nAlgunos ejemplos prácticos de cómo podrías utilizar este servidor WebSocket incluyen:\n\n- **Control de LEDs**: Puedes encender o apagar LEDs desde un dispositivo remoto (como tu PC o teléfono móvil).\n- **Lectura de Sensores**: Leer datos de sensores conectados a la Raspberry Pi Pico y enviar esos datos a un servidor o aplicación web.\n- **Contadores en Tiempo Real**: Mostrar en tiempo real información como el número de pulsaciones, el conteo de objetos o la temperatura.\n\n## Software y Firmware\n\nPara este proyecto necesitarás:\n\n- **IDE/Editor**: Puedes usar cualquier editor de código compatible con MicroPython, como Thonny, PyCharm o Visual Studio Code.\n- **MicroPython**: Este proyecto está diseñado para funcionar con [MicroPython 1.23](https://micropython.org/download/rp2-pico/) en la Raspberry Pi Pico.\n\n## Contenido del Repositorio\n\n- **src/**: Código fuente del proyecto.\n- **src/Models/**: Clases para gestionar el hardware de la Raspberry Pi Pico, como los LEDs y la conexión WiFi.\n- **docs/**: Documentación adicional e imágenes.\n\n## Instalación\n\n### 1. Instalación de MicroPython\n\n- Asegúrate de que MicroPython esté instalado en tu Raspberry Pi Pico. Puedes seguir las instrucciones en la [documentación oficial de MicroPython](https://docs.micropython.org/en/latest/rp2/quickref.html).\n\n### 2. Cargar el Código\n\n- Clona este repositorio o descarga los archivos.\n- Copia el archivo `*.env.example.py*` a `env.py` y configura tus parámetros de red, como el nombre de la red Wi-Fi y la contraseña.\n- Copia los archivos en la carpeta `src/` a la Raspberry Pi Pico utilizando un editor de MicroPython como Thonny o directamente desde la terminal.\n\n## Probar Conexión al WebSocket\n\nEste repositorio incluye un script que actúa como cliente WebSocket. Puedes ejecutarlo en tu PC para comprobar que el servidor WebSocket en la Raspberry Pi Pico está funcionando correctamente.\n\n### **`client_example.py`**\n\nEste script envía un comando al servidor WebSocket para controlar los LEDs de la Raspberry Pi Pico. Debes editar la dirección IP del servidor (tu Raspberry Pi Pico) en el script antes de ejecutarlo.\n\n### Uso básico:\n\n```bash\npython client_example.py integrated on\n```\n\nEsto enviará un comando para encender el LED integrado de la Raspberry Pi Pico.\n\n### Otro ejemplo:\n\n```bash\npython client_example.py 1 off\n```\n\nEste comando apagará el LED 1 (conectado a GPIO 1).\n\nSi todo va bien, deberías recibir en tu terminal un mensaje de confirmación con el estado \"ok\" y los datos enviados.\n\n### Parámetros de línea de comandos\n\n- **LED**: Puede ser `integrated`, `1`, o `2`.\n- **Acción**: Puede ser `on` o `off`.\n\n### Ejemplo de ejecución\n\n```bash\npython client_example.py integrated on\n```\n\nEsto encenderá el LED integrado de la Raspberry Pi Pico.\n\n```bash\npython client_example.py 1 off\n```\n\nEsto apagará el LED 1 (conectado a GPIO 1) de la Raspberry Pi Pico.\n\n## Cómo Funciona el Servidor WebSocket\n\nEl servidor WebSocket en la Raspberry Pi Pico está diseñado para:\n\n1. **Escuchar las conexiones entrantes** en el puerto 80.\n2. **Aceptar las conexiones** y esperar mensajes en formato JSON.\n3. **Procesar los mensajes**: Basado en los datos recibidos (como el nombre del LED y la acción), el servidor controla los LEDs de la Raspberry Pi Pico.\n4. **Responder al cliente**: Después de procesar la acción, el servidor envía una respuesta en formato JSON al cliente con el estado de la operación.\n\n### Protocolo de Comunicación\n\nEl formato de los mensajes enviados y recibidos es JSON. El cliente debe enviar un mensaje con los campos `action` (que puede ser `on` o `off`) y `led` (que puede ser `integrated`, `1`, o `2`).\n\nEjemplo de un mensaje JSON enviado desde el cliente:\n\n```json\n{\n  \"action\": \"on\",\n  \"led\": \"integrated\"\n}\n```\n\nEl servidor responde con un mensaje que indica que la acción se ha completado correctamente:\n\n```json\n{\n  \"status\": \"ok\",\n  \"data\": {\n    \"action\": \"on\",\n    \"led\": \"integrated\"\n  }\n}\n```\n\n## Consejos y Buenas Prácticas para WebSockets en Microcontroladores\n\n- **Conexiones no bloqueantes**: WebSocket es un protocolo que permite comunicaciones bidireccionales en tiempo real. Sin embargo, al ejecutarse en un microcontrolador, es importante usar conexiones no bloqueantes para no detener otras tareas en el código.\n- **Uso de `settimeout()`**: En este ejemplo se utiliza `settimeout()` para evitar que el servidor se quede esperando indefinidamente por una respuesta de los clientes. Puedes ajustar este valor según tus necesidades.\n- **Manejo de excepciones**: Como en cualquier aplicación de red, es importante manejar excepciones,\n\ncomo errores de conexión o interrupciones, para evitar que el servidor se detenga inesperadamente. En este proyecto, se ha utilizado un manejo básico de excepciones para asegurar que el servidor continúe ejecutándose incluso si se presentan errores.\n\n- **Consumo de recursos**: Aunque la Raspberry Pi Pico es bastante capaz, no tiene tanta potencia de procesamiento ni memoria como un servidor convencional. Asegúrate de optimizar tu código para evitar el consumo excesivo de recursos, especialmente cuando trabajes con múltiples conexiones simultáneas o tareas más pesadas.\n\n- **Conexiones simultáneas**: En proyectos más complejos, podrías necesitar gestionar varias conexiones WebSocket al mismo tiempo. Dado que la Raspberry Pi Pico tiene recursos limitados, puedes considerar el uso de técnicas como la multitarea cooperativa o la gestión de tareas por intervalos (basada en eventos) para manejar múltiples clientes sin bloqueos.\n\n## Casos de Uso Educativos\n\nAquí te dejamos algunos casos de uso educativos que pueden ser útiles para aprender más sobre WebSockets, MicroPython y la Raspberry Pi Pico:\n\n1. **Control remoto de LEDs o motores**: Puedes usar el servidor WebSocket para controlar LEDs y motores conectados a la Raspberry Pi Pico desde tu PC o teléfono móvil. Por ejemplo, puedes crear un sistema de control remoto para una maqueta, un robot o una lámpara inteligente.\n\n2. **Lectura de sensores en tiempo real**: Si conectas sensores a tu Raspberry Pi Pico (como sensores de temperatura, humedad, o acelerómetros), puedes usar WebSockets para enviar los datos del sensor a una aplicación o visualización en tiempo real. Esto puede ser útil para proyectos de monitoreo ambiental o sistemas de alerta.\n\n3. **Interacción en tiempo real en proyectos educativos**: Puedes crear una interfaz gráfica (por ejemplo, una página web o una app) que se comunique con la Raspberry Pi Pico a través de WebSockets. Este tipo de aplicaciones son muy educativas y permiten que los estudiantes interactúen con hardware en tiempo real, lo que hace más atractivo el aprendizaje de la programación y la electrónica.\n\n4. **Proyectos de IoT**: WebSockets es una excelente opción para proyectos de Internet de las Cosas (IoT), donde los dispositivos necesitan enviar o recibir datos de manera constante o en tiempo real. Usar WebSockets con la Raspberry Pi Pico es una manera sencilla de conectar sensores, actuadores o dispositivos externos a través de la web.\n\n## Licencia\n\nEste proyecto está licenciado bajo la Licencia GPLv3. Consulta el archivo LICENSE para más detalles.\n\n---\n\n### Notas Finales\n\nEste proyecto proporciona una excelente base para aprender sobre el protocolo WebSocket y cómo integrarlo en proyectos con la Raspberry Pi Pico utilizando MicroPython. Puedes expandir este ejemplo para incluir más funcionalidades como la lectura de datos de sensores, la interacción con otros dispositivos a través de la red, o incluso agregar una interfaz web para controlar los LEDs desde cualquier navegador.\n\nSi tienes alguna pregunta o sugerencia, no dudes en abrir un **Issue** en el repositorio o contactar conmigo a través de [mi sitio web](https://raupulus.dev).\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraupulus%2Frpi-pico-simple-websockets-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraupulus%2Frpi-pico-simple-websockets-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraupulus%2Frpi-pico-simple-websockets-server/lists"}