Outils pour utilisateurs

Outils du site


esp8266:le_partageoir

Différences

Ci-dessous, les différences entre deux révisions de la page.


esp8266:le_partageoir [2024/02/09 17:10] (Version actuelle) – créée - modification externe 127.0.0.1
Ligne 1: Ligne 1:
 +====== Le partageoir , la partagette ======
 +Le ou La ? 
  
 +Le partageoir est un objet électronique qui fait des trucs informatiques.
 +C'est peu la pataugeoire des enfants du numérique, expérimentant l'écriture et le codage commun.
 +Et aussi une sorte de TAZ, stase temporaire à deux sous dont les tiroirs sont à surprises.
 +L'idée première à part l'inassouvissable envie de bricolage est de faire un machin qui ne vaut rien.
 +Parce que jusque là, un boite à partage et autre pirate box, coûte plus de 25€
 +nécessite une bonne source d'énergie, et n'est pas si simple que cela à mettre en œuvre.
 +Parce que les codes de la programmation de la puce ESP8266 sont disponibles,
 +et que personne ne s'en est occupé jusqu'à aujourd'hui... 
 +tous le monde semble se perdre dans l'immensité d'Internet,
 +semant dans les nuages ce qui de fait reste très local, jetant par les fenêtres empommées son savoir, ses connaissances, ses créations, et ne récoltant que du vent, quant ce n'est pas des tempêtes. 
 +Le partageoir n'a pas besoin d'Internet, elle n'en utilise que ses sbires.
 +Elle n'a pas besoin d'autre source d'énergie que le soleil.
 +Elle ne vous fait pas consommer sournoisement 15000 km de réseau mondial au moindre clic ( prendre sa voiture pour aller acheter son pain à moins du kilomètre ou naviguer sur les réseaux sociaux toute la journée est aujourd'hui équivalent en terme d’empreinte carbone ...)
 +
 +Le partagoir ne sait faire pour le moment qu'un truc, partager localement des données numériques.
 +
 +Il peut devenir [[http://snhack.org/doku.php?id=projets:spores_numeriques|spore numérique]] dans sa phase de reproduction.
 +
 +Le partageoir est aujourd'hui une version plus sophistiquée que la partagette. Le partageoir peut porter un site web dynamique et offrir toute sorte de services réseaux que la partagette ne se contente que d'être un petit site de pages html
 +
 +Je dirais que le partageoir est sur une base de processeur ARM alors que la partagette est autour d'ESP8266 , ESP32 ou ce genre de puces WiFi dédiées au objets connectés.
 +
 +===== Nouvelle utilisation =====
 +
 +A partir d'une ESP8266 PRO cad avec 16Mo de flash, que je concidere suffisant, si on a besoin de plus il faut s'orienter sur un partageoir avec une ARM et debian
 +
 +  * Après avoir flashé l'ESP un premier reset est nécessaire
 +  * le moniteur série raconte tout un tas de trucs tel que le déroulement des opérations 
 +  * l'ESP se lance , et va chercher un serveur NTP (FreeWifi,SFR etc) pour se mettre à l'heure toute seule
 +  * elle se met en mode AP (Point d'accès) et offre le réseau SSID PARTAGEOIR ip=192.168.4.1
 +  * http://192.168.4.1/cmd_ftpon ouvre le ftp pour déposer des fichiers
 +    * user=toto pass=linux par defaut, ftp en mode passif , attention une seule session à la fois!
 +    * ftp -p 192.168.4.1 / passer par put les fichier "/..." sans oublier le /
 +  * de base il suffi de deposer /prtgeuse.txt et /listfic.txt puis de faire un reset
 +  * on peut changer les fichier un a un , ou globalement par curl 
 +    * <code>$ for file in `ls -A1`; do curl -F "file=@$PWD/$file" 192.168.4.1/edit; done // pas de sous repertoire</code>
 +    * <code>$ for file in `find . -type f -print | sed 's/.\///'; do curl -F "file=@$PWD/$file" 192.168.4.1/edit; done // fonctionne en mode admin </code>
 +
 +**Commande bash** : faire un fichier ex : esp_partagette_ftp.sh dans le repertoire à transféré, programme récursif !
 +<code> #!/bin/bash
 +echo "
 +ftp -p -n -v 192.168.4.1 <<!!
 +user toto gnulinux
 +" > /tmp/esp_ftp.sh
 +for file in `find . -type f -print | sed 's/.\///'` do
 +  echo "put $file" >> /tmp/esp_ftp.sh
 +done
 +echo "exit
 +!!" >> /tmp/esp_ftp.sh
 +bash /tmp/esp_ftp.sh
 +</code>
 +
 +le programme est aussi fourni avec les sources
 +
 +mais le mieux ?? est peut etre d'avoir sur un serveur web extérieur un répertoire accessible avec les fichiers. On peut gérer alors une flotte de partagette chacune étant identifiée séparément, le paramètre DOSSIER indiquant le répertoire du site à télécharger. ( je n'utilise plus cette fonction ...)
 +
 +Fichier prtgeuse.txt:
 +<code>
 +  #info chipID = 001840EF
 +  SOURCE_SSID ssid d'ou recupérer les fichiers (prtgeuse.txt)
 +  SOURCE_PASS
 +  SOURCE_SITE , url
 +  DOSSIER , le repertoire contenant le site a telecharger 
 +  PAGES_VERSION , telecharge si nouvelle version , int
 +  HORAIRES  se met en deepsleep si heure pas bonne ex 9,10,11,12,16,17
 +  SRVNTP serveur NTP pour mise a l'heure
 +  SSID SSID prise par la PARTAGETTE
 +  PASS mot de passe si existe
 +  SITEIP IP du site de la partagette
 +  SITE nom du site de la partagette
 +  CANAL canal_wifi de 1 a 13
 +  MAX_CONNEXION nbr de connexion simultanées max =5 (8 en theorie)
 +  INVISIBLE si 1 SSID invisible
 +</code>
 +exemple
 +<code>
 +# Global
 +#  SOURCE_SSID ssid d'ou recupérer les fichiers + config.ini
 +### definitions globales
 +SOURCE_SSID = PARTAGEUSE
 +SOURCE_PASS = 1234567890
 +SOURCE_SITE = http://truc.site/public
 +#MODIFPASS
 +### définition par zones WiFi
 +# par partageoir/partagette
 +# PREMIERE PARTAGETTE
 +# Nom des partagettes
 +# chipId , repertoire de cette SD
 +#  PAGES_VERSION , telecharge si nouvelle version , int
 +#  HORAIRES  se met en deepsleep si heure pas bonne ex 9,10,11,12,16,17
 +#  faire un fichier /listfic.txt = liste de tous les fichiers a telecharger
 +CHIP_ID = 6605423
 +PAGES = simple
 +VERSION = 1
 +HORAIRES = 0,1,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
 +SRVNTP = FreeWifi
 +SSID = PARTAGEOIR
 +PASS =
 +SITE = http://192.168.4.1
 +MAX_CONNEXION = 6
 +CANAL = 1
 +INVISIBLE = 0
 +FTPUSER = toto
 +FTPPASS = linux
 +GLOBPASS = gnulinux
 +################################################
 +CHIP_ID = 6605424
 +PAGES = defaut
 +VERSION = 1
 +HORAIRES = 0,1,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
 +SSID = PARTAGETTE
 +PASS =
 +SITE = http://192.168.4.1
 +</code>
 +fichier /listfic.txt exemple
 +<code>
 +/tags/index.xml
 +/favicon.ico
 +/categories/index.xml
 +/prtgeuse.txt
 +/index.xml
 +/index.html
 +/images/partagette-18.tgz
 +/sitemap.xml
 +/listfic.txt      
 +</code>
 +
 +
 +==== Ancienne à base de SD ====
 +
 +  - Il faut déposer ses données sur une microSD, un simple copie.
 +    - <del>ATTENTION la longueur maxi des noms de fichiers est encore de 8 caractères..</del>
 +    - <del>"//index.htm//" c'est bon , mais pas "//mon super fichiers.html//" </del>
 +  - Mettre la microSD dans le partageoir et appuyer sur le bouton.
 +  - Les données sont visibles sur un réseau WIFI 100m autour
 +  - Tous le monde peut les lire il suffit de se connecter à son réseau WIFI 
 +  - Il y a possibilité de déposer un fichier avec un code et d'autre sécurité? ( a faire ) mais de base tout devrait être ouvert...
 +  - **C'est un portail captif: cad TOUT est redirigé sur les pages présentes sur la SD !**
 +===== Avantage: =====
 +  - maîtrise de ses données partagées
 +  - on peut laisser l'objet sans y laisser sa fortune, ne coûte qu'une dizaine d'euro
 +  - fonctionne avec 2 piles ou avec le soleil
 +  - code libre
 +
 +===== Exemples d'utilisations moins triviales: =====
 +==== Une fiction interactive, une oeuvre hypertextuelle interactive ====
 +De base une fiction interactive, par exemple écrite avec [[http://twinery.org/|Twine2]] fonctionne sur  le partageoir. Ce mode de programmation gagne à être connu, il permet la création logique en utilisant de façon très simple les possibilités de javascript.
 +
 +Mais en ajoutant des fonctions voir des capteurs à la puce, on pourrait:
 +  * savoir la proximité du lecteur, le reconnaître
 +  * connaître l'emplacement de la puce ( par proximité des accès WIFI environnant )
 +  * capter les mouvement de la puce et y lier le texte et ses modifications
 +  * allumer des leds en fonction des visiteurs
 +  * ajouter des boutons pour ajouter des actions au partagoir
 +  * ...
 +
 +===== Évolution possible de l'idée =====
 +==== Inclusion de variable venant des GPIO/A0 ou de capteurs de l'ESP dans un script Twine ====
 +La page html/javascript lue sur un terminal/smartphone peut prendre en compte une information en temps réel venant des capteurs connectés sur le partagoir. Cela permet du texte interactif et dynamique avec une relation au contexte (Projet Ronce de vents...)
 +
 +Inclure une possibilité de sortir les variables par http (?json) exemple http://partageoir.local/?A0 renvoi {A0=234} ou juste 234
 +
 +Un code javascript pourrait etre du genre
 +<code>
 +var url = new URL("http://partageoir.local/?A0");
 +var A0 = url.searchParams.get("A0");
 +</code>
 +<code>
 +let url = 'https://example.com';
 +fetch(url)
 +.then(res => res.json())
 +.then((out) => {
 +  console.log('Checkout this JSON! ', out);
 +})
 +.catch(err => { throw err });
 +</code>
 +
 +===== Matériel =====
 +aujourd'hui été 2018 j'utilise
 +  * wemos esp8266 pro (16Mo de flash et un connecteur d'antenne)
 +  * un shield DS1309 pour l'horloge
 +Au début de l'année c'était:
 +  * [[https://wiki.wemos.cc/products:d1:d1_mini_lite| ESP8266 Wemos mini lite]]
 +  * [[https://wiki.wemos.cc/products:d1_mini_shields:micro_sd_card_shield|micro_sd_card_shield]]
 +  * [[https://www.all-batteries.fr/searchengine/result/?q=Pile+depolarisation+air+|Pile air Zinc 100Ah]]
 +  * MT3608 2A DC-DC Step Up Power
 +
 +=====Connexions=====
 +si vous faites cela sans le shield wemos
 +| CD/DAT3/CS | GPIO15 |
 +| CMD/DI | GPIO13 |
 +| CLK/SCLK | GPIO14 |
 +| DAT0/DO | GPIO12 (may need an 10K pullup to 3.3V) |
 +| VSS1 & VSS2 | GND |
 +| VDD | 3.3V |
 +
 +{{:esp8266:sd-card-pinout.png?200|}}
 +
 +===== Codes =====
 +==== Partagettes ====
 +==== Partagette V37 septembre 2019 ====
 +  * version Cartels Numérique
 +  * correction sur la synchronisation de l'heure sur un accès WiFi ouvert (client ntp ok)
 +  * mise au point des cycles de DeepSleep en accord avec la programmation horaire
 +  * {{ :esp8266:partagette-v37_cartel_numerique.tgz |}}
 +
 +==== Partagette V34 mars 2019 ====
 +  * correction bug initialisation
 +  * seul le json est utiliser pour la config
 +  * {{ :esp8266:partagette-34.tgz |}}
 +==== Partagette V32 dec 2018====
 +  * corrections et possibilité de mettre un emoji sur le ssid, cela filtre aussi les smartphones capables de voir le réseau wifi et donc aussi de lire du javascript (Twine2 notamment)
 +  * cycle ssid:déconnecte automatiquement le wifi au dessus de 5 (variable max_connexion) et recréer un nouveau cycle , le ssid est maintenant ssid__n ou n est un nombre qui change à chaque cycle . Ainsi on diminue les problèmes de saturation par multiple connexion (>5) et élimine le problème de la persistance du réseau wifi demandé par les clients
 +    Cette nouvelle version permet d'envisager de déposer des partagettes dans des endroits fréquentés, ce qui n'était pas le cas jusque la.
 +  * ajout/tests de la commande accessible par /edit qui permet d'avoir un gestionnaire de fichier fonctionnel sur l'ESP, pour pouvoir déposer des fichiers sons. La fonction transfert FTP n'est pas bonne pour des fichiers binaires…
 +==== Partagette V20 à 30 ====
 +Je reviens sur la synchronisation de l'heure, si une horloge est présente (DS1309) elle est utilisée , si le paramètre SRVNTP dans le fichier /prtgeuse.txt ou serv_ntp pour /prtgeuse.json est présent , il est utilisé.
 +
 +Une commande protégée cmd?srv_ntp="lepointWiFi" est disposnible , ne pas oublié de faire cmd?sauve="" ensuite
 +
 +{{ :esp8266:partagette-30.tgz |}} et {{ :esp8266:partagette.tgz |}}
 +==== Partagette V18 et V19 ====
 +Après quelques essais , j'ai implémenté d'autres fonctions
 +  * Mise a jour automatique de l'heure à partir de serveur NTP présent sur les points d'accès WiFi ouverts, dans cette version , l'horloge matérielles DSxxxx n'est plus nécessaire. On flash une ESP8266 et elle prend l'heure sans ajout ni soudure ;-)
 +  * présence d'un serveur FTP, pour pouvoir s'y connecter en mode passif
 +  * un mode administration déclenché par un mot de passe
 +  * des commandes libres
 +    * /gpio_all donne l'état A0,D1,D2,..
 +    * /date donne la date de l'ESP
 +    * /fichier donne la liste des fichiers de la flash
 +    * /cmd_ftpon ouvre le ftp
 +  * des commandes en mode admin forme : http://192.168.4.1/cmd?truc="param"
 +    * format="" pour effacer la flash
 +    * reset="" , relancer l'ESP avec telechargement des sources , fichiers /prtgeuse.txt et /listfic.txt
 +    * maj_heure http://192.168.4.1/cmd?maj_heure=2018:08:16:18:39:00 , si pas de ntp
 +    * info_conf=""
 +    * heure_ntp="" cherche le serveur ntp pour mise a l heure
 +
 +{{ :esp8266:partagette-20.tgz |}}
 +
 +
 +==== Partagettes anciennes versions ====
 +**V8** {{ :esp8266:partagette-ok-8.tgz |}}
 +
 +C'est une version que je présente au Summerlab SN juillet 2018
 +
 +PlatformIO a des bibliothèques a trous :( je repasse sur arduino pour cette parti d'échanges http
 +  * inclusion d'un client NTP mettant a jour l'horloge automatiquement
 +  * le mécanisme de maj du site sur la flash fonctionne
 +  * définitions supp
 +    * SITEIP = nnn.nnn.nnn.nnn permet d'avoir plusieurs partagettes sur le meme reseau 192.168.4.0 (defaut)
 +    * INVISIBLE, CANAL, MAX_CONNEXION  reviennent 
 +    * c'est maintenant des .txt qui sont les fichiers de config pour pouvoir passer sur les serveurs http classiques
 +  * définition et test de la partageuse sur une simple AP TPLink/NAnopiNEO
 +    * nginx sert un répertoire // /public// contenant 
 +      * //defaut/ // : la première connexion prend prtgeuse.txt ici
 +      * // /partagette/ /atelier/ //, ou autant de nom de pages/site à télécharger sur les partagettes en fonction de leur ID présente dans prtgeuse.txt
 +      * // /listfic.txt : /tructruc.css /index.html /prtgeuse.txr /blabla.mime_ok //
 +
 +
 +
 +V6 J'utilise PlatformIO pour la compilation et le dépot du site sur la flash {{ :esp8266:partagette-5.tgz |}}
 +
 +==== V9 ====
 +{{ :esp8266:partageoirsd_v9.tar.gz |}}
 +  * led clignote a chaque lecture de fichier
 +==== V8 ====
 +{{ :esp8266:partageoirsd_v8.tar.gz |}}
 +  * taille ssid, hostname passe a 30car
 +  * test mlDNS et corrections de choses bugantes
 +==== V7 ====
 +{{ :esp8266:180206-120404-d1_mini_pro.tar |}}
 +Ajouts:
 +  * parametre canal_wifi (1): faire le point sur le lieu pour trouver un canal peu encombré
 +  * parametre max_connexion (8) : connexion simultanée possible , 8 peut etre le top?
 +  * visible (1) : SSID visible=1 invisible=0
 +  * modif index.html de base ( pas pris encore en compte ) ?partie flash si pas de SD??
 +
 +le fichier param.cfg est au format json, j'ai collé un pass a cause d'android ;(
 +<code>
 +{
 +"SSID"           : "partageoir",
 +"PASSWORD"       : "0123456789",
 +"HOSTNAME"       : "surla.zone",
 +"canal_wifi"     : 1,
 +"max_connection" : 8,
 +"invisible"      : 0
 +}
 +
 +
 +</code>
 +
 +==== V6 ====
 +Sur PlatformIO et plus arduino : {{ :esp8266:ronces_sd_captif.tar |}}
 +
 +pensez pour telecharger sur la flash le spiffs , data dans le / du projet (pas /src) et faire par le terminal d'Atom :
 +-  platformio run --target buildfs
 +-  platformio run --target uploadfs
 +==== V5 ====
 +  * /partageoir.cfg
 +    * SSID ( seul puisque tout est redirigé desus )
 +<code>
 +# le SSID final sera renommé en .local
 +# par défaut SSID deviendra partageoir.local 
 +# par defaut hostname deviendra partagoir.local
 +
 +SSID = partageoir
 +HOSTNAME = partageoir
 +
 +#PASSWORD = 0123456789
 +MODIFPASS = 777
 +</code>
 +  * source{{:esp8266:partageoir-5.tgz|}} : DNSServer.cpp, DNSServer.h, Notes.h, Portail-2.ino
 +  * bin {{:esp8266:partageoir-5.bin.tgz|}} : Portail-2.cpp.bin
 +==== V4 ====
 +Fonctionne avec arduino-ESP8266 6.5.1 
 +  * partageoir.cfg fichier de parametrage sur la carte de la forme
 +
 +  * le SSID et le nom dépendent de la présence d'autre SSID identique
 +    * si le SSID=partageoir.local, l'objet prendra le SSID = partageoir01.local
 +
 +  * code partageoir-V4 {{:esp8266:partageoire-sd-nom_long-v4.ino|}}
 +==== V2 ====
 +  * param.txt
 +  * nom long sur la SD
 +  * {{:esp8266:partageoire-sd-param-nom_long.ino|}}
 +  * {{:esp8266:partageoire-sd-param-nom_long.cpp.bin|}}
 +
 +
 +==== V1 ====
 +
 +==== param.ini ====
 +//param.ini// est un fichier de paramétrage, il contient :
 +  - des commentaire qui commencent par ";"
 +  - des catégories entre crochets []
 +  - des couples item  = valeur
 +
 +  * //;Paramétrage du Partageoir// est un commentaire
 +  * //[wifi]// est le début de la catégorie 'wifi'
 +  * //ssid = partage.local// défini "partage.local" comme nom de réseau wifi
 +ainsi
 +  * [wifi] / ssid =  nom du réseau wifi
 +  * [wifi] / hostname = nom du partageoir sur ce réseau => ainsi partageoir.local sera à la fois le nom de la machine pour l'url de votre navigateur et le nom du wifi.
 +  * [network] / IPC = 4 et IPD = 3 , cela défini une adresse IP unique sur le réseau wifi
 +    * si vous avez plusieurs partageoir il faut leur donner des IPD différent 
 +    * IPC et IPD doivent être compris entre 1 et 254
 +  * [materiel] sdgpio = 16 ,connexion du signal CS sur ESP-12 ( dépend des puces ESP et de votre bricolage )
 +Il existe un fichier logfile = CONNECT.LOG qui contient les ssid environnant et les mac des machines qui se connectent.
 +
 +==== Sur base de l'IDE arduino 1.6.5 adapté à l'ESP: ====
 +
 +
 +{{:esp8266:sdweb_snhack3-v1-ok.ino|}}, mon code de test, un grand merci à Hristo Gochkov et Ivan Grokhotkov ( igrr ) ;-)
 +
 +avec un portail  captif , une grosse evolution, cf https://www.hackster.io/rayburne/esp8266-captive-portal-5798ff?ref=user&ref_id=506&offset=0
 +
 +  * code portail en chantier :{{:esp8266:portail-2.tgz|}}  {{:esp8266:portail-2.ino|}}
 +==== Les fichiers de la SD ====
 +les fichiers à coller à la racine de la SD, formatée en fat:{{:esp8266:partageoir-stock.tgz|}}
 +Attention les noms de fichier sont encore en 8.3 à l'ancienne, pas encore de nom long ...
 +  * index.htm et test.pdf 
 +  * /edit/index.htm
 +  * param.ini 
 +mon param.ini du moment
 +<code>
 +;Paramétrage du Partageoir
 +;
 +[wifi]
 +; le nom du réseau WIFI ici = nom de la page
 +; url de la page = partage.local/index.htm
 +
 +ssid = partage.local
 +hostname = partage
 +
 +; réseau ouvert
 +; password = 
 +
 +; mot de passe d'accès plus large (non implémenté)
 +; le dépot est fermé par le firmware pour le moment
 +;modifpass = sesame
 +
 +[network]
 +;mac = 01:23:45:67:AB:AB
 +;ip de base =192.168.4.1  / 255.255.0.0
 +; jamais 2 ip identiques sur le même réseau
 +;ip modifiée = 192.168.IPC.IPD
 +IPC = 4;
 +IPD = 3;             
 +
 +[materiel]
 +; CS connexion sur ESP-12
 +sdgpio = 16
 +
 +[log]
 +; compteur d'allumage
 +; compteur = compteur.log
 +; trace des connexions
 +; logfile = CONNECT.LOG
 +</code>
 +
 +Le firmware tout fait a flasher avec esptool ou esptool.py :