Interfaces de programmation pour ESP8266

La première question qu’on se pose quand on reçoit un ESP8266, c’est…

« Ah merde, mais comment je vais programmer ce machin? »

Il y a besoin de 4 fils : +, -, Rx et Tx, donc la première chose, c’est de se procurer un convertisseur USB-série. Le point crucial, c’est la tension de sortie de ce convertisseur. Elle doit être de 3.3v à la fois sur le Vcc ET sur le Tx. Le risque avec du 5V, c’est tout bêtement de griller l’ESP.

L'interface USB-série
L’interface USB-série. On peut voir en bas le sélecteur 5V-3.3V, et en haut le bouton reset.

L’ESP8266 01 a des broches au pas de 2.54mm, mais n’est pas utilisable dans une breadboard à cause de la position des broches. Donc soit on y va avec des fils et des connecteurs Dupont, soit un se fait un petit circuit imprimé pour connecter tout ça à l’adaptateur USB-série. Au début, j’utilisais la première méthode, mais j’ai finalement opté pour un petit circuit imprimé…

Vert jaune rouge... Rastaman!
Vert jaune rouge… Rastaman!

A gauche, il y a un emplacement pour un cavalier. Il sert à faire démarrer l’ESP8266 en mode programmation.

Oui, je n'avais que des connecteurs femelles à 8 contacts...
Oui, je n’avais que des connecteurs femelles à 8 contacts… C’est joli le scotch…
Et l'ensemble connecté sur le PC, prêt à être programmé!
Et l’ensemble connecté sur le PC, prêt à être programmé!

Le truc avec l’ESP8266, c’est qu’il se décline en je ne sais combien de versions différentes. J’ai aussi un 12e sous la main, et pour lui, l’emplacement des broches est un peu plus particulier, dans le sens où elles sont espacées de 2mm, et non de 2.54mm. Du coup j’ai dû commander des headers au pas de 2mm afin de faire un programmateur et adaptateur.

Il est juste glissé entre les headers pour faire le contact. Pas de soudures, c'est cool!
Il est juste glissé entre les headers pour faire le contact. Pas de soudures, c’est cool!

Après coup, je me dis que j’aurais pu placer les headers pour faire en sorte que l’ESP8266 soit carrément enfiché sur les headers. Mais là, ça va pile poil.

Il faut un cavalier en permanence entre la GPIO15 et la masse pour qu’il démarre (ça il faut le savoir…), et un autre en bas pour mettre la GPIO0 à la masse (ça c’est pour le mode programmation).

Côté connection au PC, c’est le même principe.

Un peu plus gros mais ça va bien :)
Un peu plus gros mais ça va bien 🙂

 

Fonctionnalités très appréciables dans l’IDE Arduino

Adieu l’équipe!

J’avais envie d’écrire un petit article pour saluer les évolutions de l’IDE Arduino.

Par rapports aux débuts, il y a eu à mes yeux deux avancées majeures: le gestionnaire de cartes et le gestionnaire de librairies.

Le gestionnaire de cartes

Aujourd’hui, l’IDE Arduino est utilisable avec de nombreux microcontrôleurs, par forcément Atmel.

Parmi les cartes notables que j’ai pu utiliser, il y a la Teensy 3.x et l’ESP8266.

Evidemment, le protocole d’upload des programmes vers l’un ou l’autre des microcontrôleurs est différent, et l’IDE doit savoir comment communiquer.

Pour cela, on a le menu Outils>Types de cartes, et on peut sélectionner la bonne. Mais quid des cartes non listées dans ce menu?

Et bien c’est pas compliqué.

Avant tout, il faut éventuellement ajouter la source du package pour obtenir le driver de cette carte, dans les préférences de l’IDE:

arduino-esp-preferences

Puis on va dans Outils>Types de cartes>Gestionnaire de cartes et nous avons à disposition une liste de cartes pour lesquelles on peut installer le driver, et paf! il n’y a plus qu’à la sélectionner dans le menu pour la programmer. Sympa! (bon, pas de pot, la Teensy n’apparait pas dans cette liste, il faut installer Teensyduino, un complément disponible sur le site du constructeur).
Donc plutôt pratique le gestionnaire de cartes.

arduino-esp-boards

Le gestionnaire de librairies

Alors là c’est encore mieux!
Tu as dégoté un nouveau composant et tu n’as pas le cœur à te farcir la datasheet pour comprendre comment discuter avec lui? Comme je te comprends…
Prenons à tout hasard le DHT22, qui est un capteur de température/humidité assez répandu.
Hé bien pas de prise de tête: on va dans Croquis>Inclure une bibliothèque>Gérer les bibliothèques. Une liste se charge, on tape DHT22 dans le filtre en haut, et paf! on tombe sur DHT sensor library by Adafruit.

arduino-dht22-librairy

Il n’y a plus qu’à cliquer sur le bouton installer, et on se trouve non seulement avec la librairie disponible, mais il y a aussi des exemples disponibles dans Fichier>Exemples! C’est-y pas beau, ça? Hein?

arduino-dht22-exemples

J’ai particulièrement apprécié cette fonctionnalité avec un capteur que j’avais acheté il y a quelque temps, et qui est une vraie merde à programmer: le MLX90614. C’est un thermomètre IR directionnel. Ça permet d’obtenir la température d’un objet sans contact. Mais alors pour communiquer avec, amuse toi si tu n’as que la datasheet sous la main… C’est un protocole I2C modifié, le truc bien relou.
Hé bien l’autre jour j’ai tapé MLX dans le champ de recherche du gestionnaire de librairies, et j’ai eu le plaisir de pouvoir utiliser le capteur hyper simplement. Merci à Adafruit d’avoir écrit cette classe…
Et d’ailleurs en regardant le code, c’est pas si long… Respect 🙂

Communiquer avec Adafruit IO en PHP

Salut tout le monde!

Voilà un moment que je n’ai rien posté, mais j’ai de bonnes raisons… Bricolage intensif sur l’ESP8266 (merci Sandrine de Bloguelinux) sur lequel je ferai très bientôt un gros billet 🙂

Bref, pour aujourd’hui, je vais vous parler de la plateforme Adafruit IO, qui est un superbe environnement pour stocker les données d’objets connectés.

La structure des données est simple et efficace: on crée des feeds, qui sont de simples listes de valeurs.

Chaque élément d’un feed a une valeur (une température par exemple), et éventuellement des coordonnées GPS.

Pour ma part, j’ai utilisé un capteur DHT22, et l’ESP8266 balance les données de température et d’humidité relative dans deux feeds.

Et avec les feeds, on peut (entre autres) afficher des courbes :

adafruit io graphique
Ça caille encore un peu dans le salon…

https://io.adafruit.com/toxnico

L’interaction avec AdaFruit IO pour envoyer ou lire les données se fait par une API REST; du coup je me suis dit qu’il serait intéressant d’avoir la possibilité, en PHP, de charger la dernière valeur de chaque feed pour l’afficher sur un site web par exemple.

Alors j’ai écrit cette petite librairie sous GPL v2 pour permettre à tout le monde de récupérer facilement ses données : https://github.com/toxnico/php-adafruitio

Vos retours et impressions sont les bienvenus!

A très bientôt pour une grosse aventure ESP8266 🙂

Plugin WordPress pour bloquer les tentatives d’intrusion (et les spams de commentaires?)

Si comme moi, vous avez un site qui tourne sous WordPress, vous avez probablement des dizaines de tentatives d’intrusion par jour.

Pendant un temps, j’ai utilisé le plugin All in one WordPress Security. Il bloque les adresses IP après 3 tentatives de login infructueuses, et vous envoie une notification. C’est très bien mais je l’ai trouvé un peu trop lourd pour ce que je cherchais à faire, à savoir sécuriser ma page de login.

Ne trouvant pas de solution simple pour masquer cette putain de page, j’ai décidé d’écrire mon propre plugin qui fait le boulot. C’était l’occasion d’apprendre à développer des plugins WordPress, hé bien ce n’est pas si compliqué que ça en a l’air! Accessoirement, il bloque aussi les appels XML-RPC. Et comme side effect non prévu et très intéressant, les spams de commentaires… Je ne sais pas pourquoi, mais c’est ce que je constate chez moi en tout cas 🙂

Pour la petite histoire, j’ai tenté de le vendre via la plateforme codecanyon (je ne mets pas le lien, c’est volontaire car à mon humble avis ce sont des raclures). Pour ça, j’ai packagé mon petit bouzin, j’ai documenté le code à mort et je leur ai envoyé pour qu’ils l’analysent et le publient.

Deux semaines plus tard, j’ai reçu un email me disant que mon plugin a été refusé. Pourquoi? Parce que. Merci les gars pour la précision des explications, et allez vous faire empapaouter.

Alors tant pis pour la vente, je l’ai mis sous GPL2 et je l’ai publié sur Github.

Mais il marche comment ton plugin?

Le principe est très simple. Normalement, quand on veut s’authentifier sur un site WordPress, on tombe sur la page wp-login.php et on a accès au formulaire login/mot de passe.

Hé bien une fois que ce plugin est activé, il faut juste ajouter un paramètre de votre choix dans l’URL pour que la page de login soit visible. Par exemple, wp-login.php&dirty=marmotte

C’est tout. Vous pouvez essayer chez moi si vous voulez.

Vous pouvez aussi essayer d’envoyer des requêtes POST directement sur wp-login.php, même si le login/mot de passe est correct, si la clé n’est pas là ça ne passera pas;)

Et donc, je disais plus haut que ce plugin vous permet aussi de désactiver le XML-RPC, qui est un web service permettant d’effectuer des opérations sur WordPress depuis des applications tierces. C’est un vecteur important d’attaques brute force, et il est activé par défaut alors que la plupart du temps il n’est pas utile.

Et les spams de commentaires?

Alors ça, c’est le point imprévu de ce plugin.

Je soupçonne que les spambots se basent sur la présence d’une page wp-login.php pour savoir si on est sur wordpress, et à partir de là, ils savent comment poster un commentaire de façon automatique.

Ici, comme il n’y a plus de wp-admin.php standard, ils ne sauraient pas comment envoyer un commentaire. Enfin c’est mon analyse, je ne sais pas si elle est correcte… Toujours est-il que sur mon blog, j’ai zéro spam détecté par akismet, et rien en file d’attente. C’est plutôt cool du coup. N’hésitez pas à me faire un petit retour si ce n’est pas le cas chez vous, et dans ce cas je corrigerai cet article.

Voici l’archive du plugin à installer dans WordPress :
wp-login-door.zip

wp-login-door sur GitHub

Et si ce plugin vous plait, pourquoi pas faire un petit don?

A bientôt!





Fabrication de sous-verres personnalisés, gravés au laser

Comme à chaque week-end de Pâques depuis une dizaine d’années, je vais retrouver mes amis et ma famille en Limousin, et c’est toujours la bonne occasion pour se mettre une belle race 🙂

Cette année, j’ai décidé de fabriquer des sous-verres pour l’ami Geo (http://vivrealarochette.fr), et y inscrire les principales spécialités de chez lui lorsque vient Pâques.

Les sous-verres mesurent 10cm de diamètre. Je les ai découpés à la fraise de 2.5mm, et gravés avec le laser.

1. Conception

Pour la conception, j’ai utilisé Inkscape (https://inkscape.org)
J’ai dessiné mon cercle de 10cm, mis en place mes textes. Ah tiens, au passage, voici comment courber un texte dans Inkscape:
– Il faut d’abord le transformer en chemin (menu Chemin > Objet en chemin)
– Aller dans Chemin > Effets de chemin
– Cliquer sur le + pour ajouter un nouvel effet de chemin, et choisir « Courber ».
– Jouer avec les différentes méthodes de courbure (manuelle, liée à un chemin…)

Une fois que mon dessin est prêt, je l’exporte au format PNG, en noir et blanc.

inkscape

2. Découpe

Mon laser n’étant pas assez puissant pour couper du MDF de 3mm, j’ai fait la découpe avec Cambam et une fraise de 2.5mm.

3. Préparation du G-Code pour graver l’image PNG

Pour générer du G-Code à partir d’une image non vectorielle, j’ai écrit un programme en C# qui lit l’image, et écrit les commandes G-Code dans un fichier texte. Il reste des choses à perfectionner, mais il fonctionne plutôt bien 🙂

PicGCode

4. Mise à zéro de la machine pour le laser

Une fois mes disques découpés, mon G-Code préparé, il n’y a plus qu’à les graver!
Par contre, le module laser est décalé par rapport à la fraise, donc il fallait remettre les choses à zéro avant d’attaquer.
Pour ça, j’ai fait un petit G-Code à la main, qui me dessine au laser un cercle de 10cm de diamètre. Après, je n’ai plus qu’à placer mon sous-verres dans le cercle et je suis sûr de sa position 🙂

Shapeoko, préparation gravure laser
Positionnement du disque après la mise à zéro de la machine

5. A l’attaque!

Hop, la phase la plus excitante: la gravure!

Le faisceau laser m'impressionnera toujours...
Le faisceau laser m’impressionnera toujours…
Universal G-Code Sender
Universal G-Code Sender
Petite photo prise entre deux allumages du laser
Petite photo prise entre deux allumages du laser
Et voilà la série de sous-verres :)
Et voilà la série de sous-verres 🙂

6. Vernissage

Alors certains diront qu’il ne faut pas vernir un sous-verre, parce que son but premier est d’absorber les gouttes de condensation et de pinard qui pourraient couler à l’extérieur du verre. Mais super, quoi, une fois taché, ton sous-verre est… taché.
Alors j’ai pris la liberté de passer deux couches de vernis, et j’avoue que le rendu n’est pas trop dégueu. Par contre, à la lumière, en le regardant de profil, on voit quelques coups de pinceaux. Je devrai perfectionner ma technique de vernissage…

Première couche
Première couche
Seconde couche
Seconde couche

Podcasts, RSS et PHP

Oyo!

Un petit billet « copinage » pour les podcasts que j’écoute, et promo pour podcast addict, un lecteur de podcasts sur android. Vous les trouverez (en partie) dans le menu de gauche, sous « podcasts ».

Breaking news : http://www.nextinpact.com/news/98103-podcast-addict-retire-play-store-son-developpeur-cherche-solution.htm

Non mais qu’est-ce que c’est que ce bordel?? Podcast addict retiré aujourd’hui du play store pour cause de contenu pornographique… Non mais n’importe quoi les gars… Un conseil Xavier: pars sur F-Droid…

Edit : au 18.01.2016, Podcast Addict est revenu dans le play store.

Je les écoute dans la voiture; parmi eux NipSource, une très bonne équipe dont j’aimerais bien entendre le premier épisode de 2016 au passage… Un membre de cette équipe, Donkluivert, fait son propre podcast et est hébergé sur une plateforme qui ne lui permet pas de l’exporter correctement en RSS. Quand je dis correctement, c’est juste qu’un lien vers le fichier son doit être présent dans les items du flux pour qu’il soit téléchargeable par podcast addict (susmentionné:) sur ma tablette.

Bref, je voulais ajouter son podcast à mes flux et ça ne marchait pas.

Alors j’ai écrit un petit proxy en PHP qui enrichit son flux en allant extraire les liens sons depuis les pages cibles, et qui les insère dans les items du flux RSS.

Avec un petit système de cache pour ne pas envoyer trop de requêtes vers le site initial.

Le flux complet de l’ami DK est donc ici : chroniques du jeune manchot

Alors voilà, si l’un d’entre vous anime un podcast ET a des problèmes de flux RSS (je dirais probabilité… nulle?), ce proxy est pour vous!

Post processeur CamBam pour commander le laser

J’en avais assez d’utiliser Notepad++ pour ajouter mon G-Code spécifique au laser, alors je me suis intéressé au post-processing avec CamBam.

« Hé, Nico, le post processing c’est quoi?

– Ecoute bien mon petit :

En fait, CamBam effectue deux opérations à partir d’un dessin :

  1. Il génère le parcours d’outil, en fonction du diamètre de l’outil et d’autres paramètres. Cette opération reste purement virtuelle. J’entends par là « indépendante de la machine ».
  2. Il génère du G-Code à partir du parcours d’outil calculé. Ici, le programme écrit les instructions pour la machine. Et cette machine peut avoir des spécificités dans le G-Code qu’elle attend. Une certaine manière de décrire un arc, par exemple. C’est le travail du post processeur de générer les bonnes instructions pour la machine avec laquelle je vais travailler.

Je pense qu’on pourrait assimiler le parcours d’outil au code source d’un programme; le post-processeur, lui, est le compilateur spécifique pour la machine. Il en résulte un programme G-Code dont certaines instructions sont propre à cette machine.

En tout cas, c’est ma vision de la chose.

Avec CamBam, pour accéder au répertoire des post-processeurs, il faut aller dans (par défaut) : C:ProgramDataCamBamxxxpost.

On peut y trouver un certain nombre de post processeurs déjà disponibles, comme « default », « EMC2 », « Mach3″… ça parlera à certains je pense.

Alors j’ai copié le default.cbpp en laser.cbpp et j’ai attaqué.

Le premier truc qui me prenait la tête, c’est les commentaires CamBam entre parenthèses. Je ne sais pas si c’est Repetier ou Marlin, mais un des deux n’aime pas. J’ai redéfini les commentaires avec des points-virgules (avant, je le faisais avec notepad++).

Mais les deux éléments les plus importants dans le cas du laser sont:

  • StartCut : G-Code injecté en début de coupe (c’est à dire Z sous la surface du brut)
  • EndCut : G-Code injecté en fin de coupe (Z au dessus du brut)

J’ai donc ajouté ceci, d’après ce que je disais dans l’article précédent:

[code]

<StartCut>;start laser
M400
M42 P45 S255</StartCut>
<EndCut>;Stop laser
M400
M42 P45 S0</EndCut>

[/code]

Et voici un bout de G-Code généré avec ce post processeur:

[code]

G21 G90 G64 G40
G0 Z3.0
;T3 : 0.0
;T3 M6
;Gravure1
G17
M3 S1000
G0 X0.0 Y0.0
G1 F300.0 Z-0.4
;start laser
M400
M42 P45 S255
G1 F800.0 X20.0 Y20.0
;Stop laser
M400
M42 P45 S0
G0 Z3.0

[/code]

Par contre c’est bête, il y a toujours les commandes de Z… Je n’ai pas encore trouvé comment les faire sauter automatiquement, celles-là… Alors en attendant je les vire avec un petit search & replace de notepad++ en mode expressions régulières : je remplace « .*Z.* » par «  » (ne pas tenir compte des guillemets). En gros ça efface les lignes qui contiennent la lettre Z.

Télécharger le post-processeur (à renommer en .cbpp)

Planning Machine V2

Après le relatif succès de la Planning Machine, et après avoir découvert Bootstrap il y a maintenant une bonne année, j’ai décidé de faire une refonte complète de l’application. Plus jolie (même si ça reste subjectif), plus facile à maintenir, et plus intuitive.

L’inscription et la connexion se font maintenant uniquement avec OpenID (Google, Yahoo, ou n’importe quel autre provider OpenID). Cela évite de remplir un formulaire, recevoir un mail de confirmation à valider… Beaucoup plus simple.

A propos d’OpenID, sachez que je ne lis, ni ne stocke aucune information, à part évidemment l’URI unique délivrée par le provider OpenID. Quand je dis aucune, c’est vraiment aucune, pas même votre adresse mail.

Alors voilà, si vous avez des choses à planifier, c’est par là que ça se passe.

Visualiser les fichiers STL

J’ai remarqué qu’il n’était pas toujours évident d’avoir un aperçu facile et rapide d’un lot de fichiers STL.

Dans les outils que j’ai pu trouver, il faut importer chaque STL pour pouvoir le visualiser. Alors je ne me suis pas démonté, j’ai fait le mien.

On lui donne un répertoire, qu’il scanne récursivement à la recherche des fichiers STL. Le tout apparait dans une liste, et on peut rapidement passer d’un modèle à un autre sans se prendre la tête.

Le programme a été écrit en C#, et s’appuie sur la librairie VTK : un monstre outil pour visualiser tout et n’importe quoi facilement. A l’époque, je l’avais utilisé en C++ pour construire des modèles 3D à partir de séries d’images DICOM (issues d’IRM ou de scanners). Là, pour le C#, j’ai utilisé le portage Activiz.NET.

On peut afficher seulement les surfaces, surfaces et arêtes, arêtes seules, ou rien du tout (mais ça perd un peu de son intérêt).

La caméra est pilotable avec la souris :

  • clic molette + drag ->pan
  • clic gauche + drag ->rotation
  • molette -> zoom

Télécharger DirtySTL Viewer

Sources: https://github.com/toxnico/dirty-stl-viewer

dirty_stl_reader_2 dirty_stl_reader_1

Dirty Feed Reader

Récemment, une nouvelle m’a bien attristé : Google va fermer Google Reader. Et merde, me suis-je dit.

Je suis un consommateur régulier de flus RSS, et Google Reader était parfaitement adapté à mes besoins, notamment sur mon galaxy tab 2.

Je suis allé faire un tour sur le net pour voir quelles étaient les alternatives envisageables, et je suis tombé sur Feedly (dont j’avais auparavant entendu parler en bien). J’ai installé le bidule sur la tablette.

  1. Magnifique: j’entre seulement mon adresse gmail, et il m’importe tous mes flux.
  2. Je m’émerveille devant la présentation des flux. Visuellement, ça pète!
  3. J’explore un peu, et je ne comprends RIEN. Pourquoi m’affiche-t-il les articles de façon aléatoire? Ce que je veux, c’est simplement avoir la liste de mes flux, la liste des articles, et rien de plus… Feedly est trop compliqué pour moi… Visuellement superbe, mais à mes yeux inutilisable.

Ça me démangeait depuis un moment de développer mon propre lecteur de flux RSS, alors c’était l’occasion.

J’ai donc développé ce lecteur en gardant la même structure: des répertoires, et des flux rangés dedans.

A côté de ça, je me suis amusé à implémenter une authentification OpenID. Bon ok, le seul fournisseur d’identité en place est pour l’instant… Google… Mais ça marche! Plus besoin, donc, de remplir un formulaire d’inscription avec nom d’utilisateur et mot de passe. Un bon gain de temps pour se créer un compte 🙂

Je suis globalement satisfait de ce programme; il reste à peaufiner l’interface pour les tablettes et ce sera parfait!

J’ai écrit une fonction pour importer un fichier opml, histoire de récupérer la liste des flux actuels de Google Reader.

Pour ceux que ça intéresse, c’est par là!