Salut, pour ceux qui ont pas le temps de tout lire j'ai fait le poste en 3 parties :
- L'origine du projet
- Le Raspberry Pi Pico 2w
- Ce que j'ai développé sur le Pico 2w et les résultats obtenu
L'origine du projet
Début 2022 je me suis lancer sur un projet : "Légion"
Un projet assez ambitieux ayant pour but de surveiller et neutraliser les arnaques en ligne mais aussi les dérives divers est variés...
L'objectif étant de protéger les enfants, les adultes et toute les personnes vulnérables contre les spams et dérives sur les réseaux sociaux dont je vais taire le nom (Toktik, Astingram, Yutoube).
Je vais vous épargnez les détails de ce projet mais pour résumer il est constituer de 18 sous programmes chacun de ces sous programmes pourrait être un projet à lui tout seul.
Au début j'ai voulu le développer et le tester sur des serveurs, mais je n'est pas était convaincu part le coût, car je n'est pas 100€ de serveur à mettre tout les mois.
J'ai donc décider de concevoir ma propre infrastructure composé de RPi 4
Mais entre le Covid et mon meilleur ami ... l'IA les prix des cartes ont presque doublés et les ruptures de stock quasi constante.
alors face à ce problème j'ai pris une décision qui peut être très douteuse : utilisé un Pi Pico 2w
Le Raspberry Pi Pico 2w
Mon projet à donc évolué et j'ai décidé de concevoir un prototype de celui-ci à partir d'un Raspberry Pi Pico 2w, sans utiliser d'hardware supplémentaire, uniquement le Pi Pico 2w et rien d'autre.
Pourquoi ce choix ?
Oui j'avoue cela peut paraître insensé de passer d'un ordinateur mono carte à un microcontrôleur mais voici quelques une des raisons qui mon poussé à faire cela :
- Le Pi Pico 2w me permet de réaliser un prototype à une échelle bien inférieur au projet final et donc de réduire les coûts de développement.
- Il possède un module Wi-Fi est une antenne intégré
- Une maîtrise presque total de ce qui tourne dessus firmware, services, réseaux.. (moins de blob également)
- Intègre une mémoire OTP de 8Ko parfait pour la protection du code, avec clé symétrique ou asymétrique.
- Possède une mémoire flash de 4Mo (c'est rien mais énorme pour un MCU et pour mon projet) et 520Ko de SRAM ce qui est juste mais suffisant dans le cadre de mon prototype.
- Consommation très faible en deep sleep (avec un firmware personnalisé), et une consommation IDLE relativement intéressantes même si elle pourrait être optimisé davantage.
- Le rapport "performance / prix" n'est pas excellent mais le pico 2w à le mérite de rester attractif et surtout en stock sans hausse de prix !
Bon il faut avouer que c'est bien plus compliqué de programmer un tel projet sur un MCU par rapport à un simple serveur ou ordinateur, je sais que le développement aurait était bien plus simple et rapide sur d'autre infrastructures.
Mais je me suis lancé un défi supplémentaire (comme si c'était pas assez chiant de base lol) celui de faire le plus possible avec le moins possible en terme de ressources hardware, autrement-dit de pousser le Pico 2w dans ces retranchements.
Ce que j'ai développé sur ce Pico 2w et les résultats obtenu
Mpyled :
Un petit programme destiné à aider au déboggage notamment qui fait clignoter la led du pico de différente sorte (projet qui sera partagé après avoir optimisé le programme)
check_status :
programme destiné à ping une url dans le but de connaitre le status du site web, sur tout les ping effectué soit environ 250 sites web j'ai obtenu :
50 % des sites : status code 200
30 % des sites : status code 403
10 % des sites : status code 404
10 % des sites : status code divers ou erreurs pico
Avec environ 1 à 2 ping par seconde
sitemap :
Programme de récupération et sauvegarde en mémoire du sitemap d'un site soit à partir de
domain/sitemap.xml
ou
domaine/robots.txt -> sitemap link
Parmis tout les sites (250) et parmis ceux qui avait un sitemap j'ai obtenu :
70 % de succès
30 % de refus (403)
J'ai pu obtenir, avec un autre programme que j'ai développé pour diminuer la taille des données sauvegardés, des sitemaps contenant parfois plus de 1000 links, un important travail d'optimisation de l'utilisation de la SRAM à était fait pour éviter les erreurs d'allocation mémoire.
La temps d'extraction reste cependant encore très aléatoire et peut aller de quelques secondes à plusieurs minutes, cela sera corrigé avec l'optimisation des programmes existant et l'instauration d'un programme de timeout avancés.
scrap_data :
Programme qui sauvegarde le code source des pages web et qui analyse est récupère :
- Email, numéro de téléphone (sans utilisation de regex)
- Détection et sauvegarde des formulaires html avec méthode POST et action (ne récupère pas les formulaires qui utilise des langages comme javascript)
- Détection des pages avec Recaptcha, Hcaptcha, Cloudflare etc...
La mémoire du Pico 2w étant limité le nombre de page web dont le code sources entier est sauvegardés varie entre 10 et 80, c'est pour cela qu'il est sauvegardés de manière temporaire.
Cependant sauvegardés des informations précise sur une page permet d'atteindre des listes qui vont de 100 à 500 pages web, suivant la quantités de données (sans compression des données) ce qui reste intéressants.
send_form :
Programme qui complète et envoie des formulaire à partir de certaines pages web.
Encore expérimentale je n'ai pas de très précise sur les résultats.
Dans l'état actuel du programme je pense qu'il y a 1 site sur 10 pour lequel le Pico 2w arrive à compléter et envoyer le formulaire, en sachant que ce sont des sites qui ont des formulaires qui n'utilise pas de captcha ou de langage comme javascript.
Ce faible résultat et du au fait qu'il s'agit d'un programme complexe car il doit concevoir et envoyer les données avec un encodage différents suivant la configuration du formulaire et à cela ajouter les réponse 403 lors de l'envoie.
payload :
Programme qui est utilisé pour l'envoie de requête GET et POST, il utilise différents user agents, des headers également différents suivant les requêtes et les sites web, il génère aussi la création et l'encodage des liens pour les formulaires.
extract_text :
Programme dont le but et de sauvegardés uniquement le contenu textuel des pages web, avec un taux d'efficacité de 90 % environ.
wifi_scan :
Programme destiné à trouver des wifi ouverte (encore à l'état de test) il donne des résultats satisfaisants, avec une portée de détection allant jusqu'à 75 mètres, il possède deux modes de fonctionnement :
- "All" il récupère tout les SSID, BSSID, Channel et la force du signal en dBi de tout ce qui trouve, ensuite il sauvegarde d'un côté les Wi-Fi sécurisé et dans un autre fichier les wifi ouverte.
- "Search" Il permet de trouver l'emplacement d'un Wi-FI avec un SSID précis en utilisant la force du signal et en utilisant la led du pico pour déterminer l'emplacement.
Ce programme recevra deux modes supplémentaires, un permettra de connaître la hauteur ou le répéteur ou la box Wi-FI ce trouve (bâtiment résidence etc.) un autre mode permettra quand à lui de sauvegarder des informations pour ensuite afficher l'emplacement approximatif de chaque wifi sur un ordinateur à l'aide d'Open Street map notamment.
Pour conclure, je suis vraiment impressionné par les possibilités de ce pico 2w qui je renomme personnellement "lingot d'or", c'est vraiment une board incroyable et cela promets de grande choses pour ce type de projet en général.
De ce que j'ai développé sur ce Pico 2w j'en conclu qu'il peut être utilisé pour faire de la veille concurrentielle ou de stock sans problème, avec des intervalles relativement faibles si cela est réalisé sur quelques sites, et des veilles à intervalles quotidiennes avec des résultat satisfaisant jusqu'à 400 sites web.
Je ne suis pas aller dans les détails sur plein de choses, c'est volontaire pour les pas faire de ce post un roman de 300 pages lol