Saleae Logic 16 – Prise de notes

Sur le site d’aliexpress, j’ai fait l’acquisition d’un analyseur logic sur usb nommé Saleae Logic 16. Ce billet de blog est là pour garder une prise de notes de mes manip’ avec l’engin.

Le colis comporte :

  • Le boitier USB Saleae Logic 16
  • un câble déjà branché avec 16 fils «dupont» de signals et 4 fils «dupont» de masse
  • un câble USB (violet!) de 1.5m

Le logiciel peut fonctionner sous Linux et est téléchargeable sous la forme d’une archive zip de 27Mo à l’adresse suivante.

Pour l’installer il suffit de le dézziper dans le répertoire de son choix. Pour l’instant je n’ai pas trouvé d’autre solution que de le lancer en sudo pour qu’il fonctionne:

$ cd Logic\ 1.2.18\ (64-bit)/
$ sudo ./Logic

Ce qui donne une fenêtre comme ça :

[À éditer …]

Publié dans Non classé | Laisser un commentaire

Papyr, le papier électronique par electronut labs

Electronut LABS propose un petit kit permettant de tester le papier électronique connecté au bluetooth. Le kit est proposé dans une petite boite métallique, la documentation n’est disponible que sur le site officiel.

Le kit papyr sorti de sa boite en métal

L’intérêt de ce genre de kit est de tester le papier électronique, mais comme la carte inclue également un chip Bluetooth nRF52840 de chez nordic. On peut donc faire une pierre deux coups : tester un epaper et le bluetooth.

Test rapide

Pour un test rapide, il faut un téléphone muni d’un OS android et un accès au «store» de google. L’appli est simplement accessible sous le nom «electronut labs». Une fois lancé il nous reste à:

  • Allumer le kit en insérant la pile et en commutant le bouton sur «batt»
  • lancer l’application de dessin
  • Dessiner ce que l’on souhaite (pas évident, l’appli est assez mal foutue)
  • cliquer sur «send image»
  • Attendre presque 30 secondes que l’écran change.
  • L’écran va d’abord clignoté en noir pour dessiner les parties noires
  • Puis il va clignoter en rouge pour dessiner les parties rouge
On en chie pour dessiner un simple bonhomme 😉

Si l’on éteint le kit (bouton position usb) alors l’image reste, c’est le but recherché.

Publié dans électronique, Non classé | Marqué avec , , , , , , | Laisser un commentaire

Réception du kit SiPeed MAIX GO

(Bloc notes éditables au fur et à mesures de mes expérimentations)

La société chinoise SiPeed (le site s’affiche très mal avec firefox chez moi, par contre chromium marche mieux) lançait une campagne de crowdfunding en novembre dernier pour construire un kit de developpement à base de module Kendryte K210 muni d’un double cœurs Risc-V 64bits.

Pour $50 on pouvait acquérir un kit complet muni de :

  • La carte électronique SiPeed MAIX GO
  • un réseau de microphones
  • Un simple micro + HP
  • Un écran LCD + touchscreen
  • Une simple caméra
  • Une carte double caméras stéréo
  • Une antenne wifi et toute la visserie nécessaire pour faire un boîtier


Voici donc le contenu du colis reçu après deux mois de retard (ce qui n’est pas non plus exceptionnel dans ce genre de campagne de crowdfunding):

Contenu de la boite M1W

Une notice de montage est fournie sous forme de vidéo youtube (encore …).

Le kit complet
La carte «mère» et son fameux module SIPEED M1W

À l’allumage on détecte quelques trucs sur le dmesg

$ dmesg
[21758.478583] usb 3-2: new full-speed USB device number 4 using xhci_hcd
[21758.620109] usb 3-2: New USB device found, idVendor=c251, idProduct=f001
[21758.620113] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[21758.620116] usb 3-2: Product: CMSIS-DAP
[21758.620118] usb 3-2: Manufacturer: CMSIS-DAP by ARM
[21758.620119] usb 3-2: SerialNumber: 0001A0000000
[21758.620902] cdc_acm 3-2:1.0: ttyACM0: USB ACM device
[21758.622685] hid-generic 0003:C251:F001.0006: hiddev0,hidraw3: USB HID v1.00 Device [CMSIS-DAP by ARM CMSIS-DAP] on usb-0000:00:14.0-2/input2

Il est possible de se connecter au port série trouvé et on obtient un message du programme déjà chargé dans le kit :

$ kermit
C-Kermit 9.0.302 OPEN SOURCE:, 20 Aug 2011, for Linux+SSL+KRB5 (64-bit)
 Copyright (C) 1985, 2011,
  Trustees of Columbia University in the City of New York.
Type ? or HELP for help.
(/home/fabien/) C-Kermit>c
Connecting to /dev/ttyACM0, speed 115200
 Escape character: Ctrl-\ (ASCII 28, FS): enabled
Type the escape character followed by C to get back,
or followed by ? to see other options.
----------------------------------------------------

 __  __              _____  __   __  _____   __     __ 
|  \/  |     /\     |_   _| \ \ / / |  __ \  \ \   / /
| \  / |    /  \      | |    \ V /  | |__) |  \ \_/ / 
| |\/| |   / /\ \     | |     > <   |  ___/    \   /  
| |  | |  / ____ \   _| |_   / . \  | |         | |   
|_|  |_| /_/    \_\ |_____| /_/ \_\ |_|         |_|
Official Site:http://www.sipeed.com/
Wiki:http://maixpy.sipeed.com/
[MAIXPY]Pll0:freq:320666666
[MAIXPY]Pll1:freq:159714285
[MAIXPY]Flash:0xc8:0x17
[MAIXPY]:Spiffs Mount successful 
[MAIXPY]LCD:init

MicroPython 3b5c45649-dirty on 2018-11-15; Sipeed_M1 with kendryte-k210
Type "help()" for more information.
>>> 

Par contre, pour le moment, impossible d’écrire quoi que ce soit sur la console avec kermit. Michael Wilkinson donne quelques indices quand à ce problème dans les commentaires d’indiegogo :

«Michael Wilkinson 6 days ago

I’ve received my ALL IN ONE as well today. Quick tip: If you are having trouble connecting to the REPL out of box over serial, make sure you are using 115200 baud and hardware flow control or you’ll get nothing. From the schematic it appears that DTR and RTS are wired to BOOT and RST and so must be actively controlled. Might only be a thing on the MAIX GO boards which have a dedicated STM32 JTAG/UART bridge chip on them.»

Visiblement il suffirait d’activer le contrôle de flux pour que ça puisse marcher correctement.

Sentry donne une solution sur le forum sipeed. En utilisant un petit script python qui appel miniterm en désactivant les ligne dtr et rts on arrive à se logger correctement sur la carte.

import serial.tools.miniterm as MTM

MTM.main(default_port='/dev/ttyACM0',
        default_baudrate=115200,
        default_dtr=False,
        default_rts=False)

Le script se lance ensuite simplement avec python (2.7 chez moi) :

$ python sipeedcom.py 
--- forcing DTR inactive
--- forcing RTS inactive
--- Miniterm on /dev/ttyACM0  115200,8,N,1 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---

 __  __              _____  __   __  _____   __     __ 
|  \/  |     /\     |_   _| \ \ / / |  __ \  \ \   / /
| \  / |    /  \      | |    \ V /  | |__) |  \ \_/ / 
| |\/| |   / /\ \     | |     > <   |  ___/    \   /  
| |  | |  / ____ \   _| |_   / . \  | |         | |   
|_|  |_| /_/    \_\ |_____| /_/ \_\ |_|         |_|
Official Site:http://www.sipeed.com/
Wiki:http://maixpy.sipeed.com/
[MAIXPY]Pll0:freq:320666666
[MAIXPY]Pll1:freq:159714285
[MAIXPY]Flash:0xc8:0x17
[MAIXPY]:Spiffs Mount successful 
[MAIXPY]LCD:init

MicroPython 3b5c45649-dirty on 2018-11-15; Sipeed_M1 with kendryte-k210
Type "help()" for more information.
>>> help()
Welcome to MicroPython on the Sipeed Maix One!

For generic online docs please visit http://maixpy.sipeed.com/

Official website : www.sipeed.com

Current installed module:
os modules:Built-in system operation module and file operation method
machine module:Built in some machine related modules
socket modules:Network operation method
app modules   :Provide some applications

Control commands:
  CTRL-A        -- on a blank line, enter raw REPL mode
  CTRL-B        -- on a blank line, enter normal REPL mode
  CTRL-C        -- interrupt a running program
  CTRL-D        -- on a blank line, do a soft reset of the board
  CTRL-E        -- on a blank line, enter paste mode

For further help on a specific object, type help(obj)
For a list of available modules, type help('modules')
>>> help('modules')
object modules is of type str
  encode -- <function>
  find -- <function>
  rfind -- <function>
  index -- <function>
  rindex -- <function>
  join -- <function>
  split -- <function>
  splitlines -- <function>
  rsplit -- <function>
  startswith -- <function>
  endswith -- <function>
  strip -- <function>
  lstrip -- <function>
  rstrip -- <function>
  format -- <function>
  replace -- <function>
  count -- <function>
  partition -- <function>
  rpartition -- <function>
  center -- <function>
  lower -- <function>
  upper -- <function>
  isspace -- <function>
  isalpha -- <function>
  isdigit -- <function>
  isupper -- <function>
  islower -- <function>
>>> 

Pour quitter miniterm faire un Ctrl+] ou éteindre le maixpy.

La documentation de MaixPY est disponible en anglais ici.

Ressources:

Publié dans Non classé | Marqué avec , , , , , | Laisser un commentaire

Réception de la VegaBoard

OpenISA propose une carte de développement à base de cœur Risc-V et Arm pour faire de l’IoT: la VEGABoard.

Schéma blocs de la VEGABoard

Le premier lots de cartes était disponible à la demande en novembre/décembre 2018. Ayant demandé gentiment j’ai pu recevoir un kit de leur part 😉

Le kit est assez minimaliste et se présente sous la forme d’une petite boite en carton.

Avec la carte de développement, un câble USB et quelques ponté-de-court-circuits.

Pour le guide de démarrage il y a une petite feuille volante nous demandant d’aller voir sur internet.

On peut également visionner la vidéo de démarrage et de branchement de sa VEGABoard sur Youtube.

Visiblement il manque la sonde JTaG dans mon kit. Mais je pense que c’est voulu, on doit déjà pouvoir commencer à faire des choses sans. La sonde JTaG proposée est une JLink un peu cher (à partir de 300€ visiblement) donc on fera sans pour le moment tant que je ne trouverais pas de solution plus viable. D’après le forum officiel il est possible de se procurer une version low-cost de cette sonde chez adafruit.

Le branchement à l’ordinateur sur le connecteur USB J12 fait apparaître pas mal d’interfaces dans le dmesg :

$ dmesg
[ 1178.214445] usb 3-1: new high-speed USB device number 2 using xhci_hcd
[ 1178.355326] usb 3-1: New USB device found, idVendor=0d28, idProduct=0204
[ 1178.355331] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1178.355334] usb 3-1: Product: DAPLink CMSIS-DAP
[ 1178.355337] usb 3-1: Manufacturer: ARM
[ 1178.355339] usb 3-1: SerialNumber: 02250000800a00184e453614ffffffff0028ffff97969906
[ 1178.357544] hid-generic 0003:0D28:0204.0004: hiddev0,hidraw3: USB HID v1.00 Device [ARM DAPLink CMSIS-DAP] on usb-0000:00:14.0-1/input3
[ 1178.952081] usb-storage 3-1:1.0: USB Mass Storage device detected
[ 1178.952231] scsi host6: usb-storage 3-1:1.0
[ 1178.952360] usbcore: registered new interface driver usb-storage
[ 1178.973347] usbcore: registered new interface driver uas
[ 1178.982598] cdc_acm 3-1:1.1: ttyACM0: USB ACM device
[ 1178.982842] usbcore: registered new interface driver cdc_acm
[ 1178.982843] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
[ 1179.967098] scsi 6:0:0:0: Direct-Access MBED VFS 0.1 PQ: 0 ANSI: 2
[ 1179.967849] sd 6:0:0:0: Attached scsi generic sg2 type 0
[ 1179.967976] sd 6:0:0:0: [sdc] 131200 512-byte logical blocks: (67.2 MB/64.1 MiB)
[ 1179.968101] sd 6:0:0:0: [sdc] Write Protect is off
[ 1179.968107] sd 6:0:0:0: [sdc] Mode Sense: 03 00 00 00
[ 1179.968260] sd 6:0:0:0: [sdc] No Caching mode page found
[ 1179.968270] sd 6:0:0:0: [sdc] Assuming drive cache: write through
[ 1179.972344] sd 6:0:0:0: [sdc] Attached SCSI removable disk

En plus de l’habituel port de debug en uart (ttyACM0) on peut voir se monter un disque (sdc) ! Ce disque contient un fichier HTML avec un liens vers une page de NXP et un fichier de détails donnant ce qui semble être les caractéristiques de la carte:


$ cat /media/fabien/RV32M1/DETAILS.TXT
# DAPLink Firmware - see https://mbed.com/daplink
Unique ID: 02250000800a00184e453614ffffffff0028ffff97969906
HIC ID: 97969906
Auto Reset: 0
Automation allowed: 0
Overflow detection: 0
Daplink Mode: Interface
Interface Version: 0244
Git SHA: 6ff5529d66104e9744bf43fb3ee62baecd11b560
Local Mods: 1
USB Interfaces: MSD, CDC, HID
Interface CRC: 0xae100b74
Remount count: 0

La connexion au port uart /dev/ttyACM0 avec kermit (115200) me donne une suite ininterrompue de coordonnées x/y :

$ kermit -c
[...]
x=  1 y =  4
x=  1 y =  4
x=  1 y =  5
x=  1 y =  5
x=  1 y =  5
x=  1 y =  4
x=  1 y =  4
x=  1 y =  4
[...]

Pour commencer à jouer avec la carte, il faut se rendre sur le site d’OpenISA. La totalité de la documentation du kit est disponible sous la forme d’un gros (39Mo) zip téléchargeable sur leur site:

$ wget https://github.com/open-isa-org/open-isa.org/releases/download/1.0.0/Documentation.zip

Le SDK est disponible en téléchargement directement via une archive au forma *.sh ! Ce script (de 38Mo !) permet de forcer l’utilisateur à lire la licence avant de pouvoir décompresser l’archive tar.gz :

$ wget https://github.com/open-isa-org/open-isa.org/releases/download/1.0.0/rv32m1_sdk_riscv_installer.sh
[...]
$ bash rv32m1_sdk_riscv_installer.sh 
$ ls
rv32m1_sdk_riscv_installer.sh  rv32m1_sdk_riscv.tar.gz
$ tar -zxvf rv32m1_sdk_riscv.tar.gz 
[...]

Attention l’archive ne se décompresse pas dans un sous répertoire, donc si vous êtes dans votre home vous allez en foutre partout.

L’archive contient un pdf «getting started guide» expliquant le fonctionnement de la toolchain.

[À suivre sur cette même page …]

Publié dans Non classé | Marqué avec , , , , | Laisser un commentaire

Qu’affiche le code suivant ?

char* states[] = {
    "PLOP",
    "PLIP",
    "BOUHHH",
    "CROTTE",
    "DINGDING",
    "CAFE",
    "UB40"
    "GWB",
};
char * others_string[] = {
    "ROGER",
    "RABBIT",
};
[...]

printf("State %s\n", states[7]);

Je précise que je compile toujours en -Wall et que je n’avais aucun warning bien sûr !

[edit 6 décembre 2018]

Si c’est un compilateur GCC pour ARM sur APF6 (j’ai pas toutes les options en tête) la fonction printf affiche :

State ROGER

Par contre sur un pc (debian) sans aucune option spécifique :

State (null)

Et oui ça n’est pas vu comme un bug … puisque ça compile en -Wall et que ça s’exécute sans problème (enfin pour l’exécution il y a quand même une histoire de pointeur qui va trifouiller au mauvais endroit de la mémoire sur la version «embarquées»).

Tout simplement car deux chaînes de caractères côtes à côtes sont considérées comme une seule et même chaîne.
Ici “UB40” et “GWB” ne sont pas deux chaînes de caractères distinctes mais une seule et même chaîne : “UB40GWB”. Il n’y a pas d’index numéro 7 et donc on déborde sur la suite … qui est également un tableau de pointeurs sur chaînes de caractères. Du coup ça ne le dérange pas de l’afficher.
cqfd

Publié le par admin | 3 commentaires

Partage des photos sur le réseau local avec sa raspberry-pi

C’est pas souvent que je suis contraint de toucher à l’OS de Micro$oft, mais à chaque fois ça me rend fou !

Alors voila, je cherche à faire un truc qui me semble simple : partager un disque dur sur mon réseau local pour que tous les ordinateurs de la maison puissent y avoir accès. Et plus particulièrement : que tout le monde puisse avoir accès aux photos.

Pour cela je suis parti gaiement la fleur au fusils installer samba sur ma raspberry pi (raspbian) et j’ai suivi quelques tuto sur le web pour partager mon disque dur USB à toute la maison.

Le tutoriel est plutôt simple, le partage se fait parfaitement avec mon ordinateur (debian). Rappelons tout de même que Samba utilise un protocole micro$oft, donc si ça marche même sur un pc Debian, cela devrait être transparent sous W$ …

Et bien non, j’ai tout simplement pas réussi à accéder au partage samba de ma raspberrypi avec l’ordinateur w$ que j’ai à la maison.

C’est un ordinateur «familiale» qui possède donc un windows «windows 10 family». Et bien il semblerait que cela ne fonctionne pas avec la version famille de w$10 !

J’ai eu beau tester d’obscures commandes ici et ici, mais non impossible, w$ persiste à me dire que j’ai pas la possibilité d’y accéder et qu’il faut contacter l’administrateur (peut-être aller mettre un cierge …).

Pour préserver ma santé j’ai donc abandonné l’idée de partage samba et lancé simplement la commande python suivante dans le répertoire que je voulais partager:

Photos/$ python -m SimpleHTTPServer

Une fois cette commande lancée sur la raspberrypi il est possible de parcourir avec firefox (en lecture seule) le contenu des répertoires, charger les fichiers que l’on souhaite visualiser en allant simplement sur le «site» en question :

http://raspberrypi.local:8000/

Seulement quand on souhaite visualiser les photos d’un répertoire, elles vont s’afficher une par une et il faudra revenir en arrière à chaque fois pour aller cliquer sur la suivante.

Ce qui serait bien c’est de pouvoir naviguer vers la photo précédente et/ou la suivante avec un simple bouton.

C’est quelque chose qui peu se faire assez simplement avec un script greasemonkey.

Voici donc le script en question qui ajoute un lien vers la photos précédente et un lien vers la photo suivante.

C’est du quick&dirty mais ça fait le job.

Pour l’installer il faut bien sûr avoir l’extension «greasemonkey» installée sur son firefox. Puis ouvrir le menu greasemonkey en cliquant sur le singe. De là il suffit de copier coller le code fourni en lien puis d’activer le script.

Publié dans humeur, informatique | Marqué avec , , , , , , , | Laisser un commentaire

Prise en main de l’émetteur récepteur 433Mhz RXFcom dans domoticz sur Raspberrypi

J’ai craqué, plutôt que de continuer mon hack avec l’entrée son sur un kit rasbperry-pi, j’ai acheté un produit tout fait du marché : le CM180. Je ne trouvais pas le temps pour bien calibrer mon montage raspberry-pi. De plus, l’enregistrement du son en continu avec les calculs de puissance RMS prenait beaucoup de ressource proc et … consommait pas mal !

Du coup j’ai un super afficheur au milieu du salon qui me donne la puissance électrique consommé par ma maison en temps réel. Le boitier en question communique avec le boîtier de mesure en 433Mhz se situant dans mon tableau électrique.

Je n’ai cependant pas perdu de vue mon objectif premier : enregistrer (logger) la consommation électrique de la maison avec ma raspberry-pi. Pour cela j’aurais pu faire un montage à base de petit émetteur/récepteur 433Mhz comme on en trouve des milliers sur le marché. J’aurais pu également me lancer dans le montage d’un émetteur récepteur libre à base d’arduino comme on en trouve à travers le web. Mais non, là encore j’ai craqué pour un truc tout fait du commerce (et bien plus cher) en achetant un RFXcom USB. L’objectif étant de ne pas perdre trop de temps en configuration pour me concentrer sur la gestion d’un serveur de log sur raspberry-pi (certainement domoticz).

Le vif du sujet

On trouve plusieurs tutoriels pour l’installation du RFXcom sous Linux. Mais comme d’habitude avec mon pc sous debian, ça ne marche pas tout à fait comme décrit.

Et comme l’objectif final est d’utiliser l’adaptateur sur une raspberrypi, autant s’y mettre tout de suite, d’autant que tutomotic propose un très bon tutoriel pour ça.

L’installation sur la raspberrypi est extrêmement simple, il suffit de taper la commande :

sudo curl -L install.domoticz.com | bash

Puis de se connecter au serveur avec son navigateur pour la configuration.

Pour la connexion de domoticz au CM180 on se reportera au tuto de l’atelier du geek qui explique tout très bien. Une fois l’adaptateur ajouté, le compteur d’energie est visible dans la rubrique «dispositif».

Et voila on peut maintenant fliquer sa consommation d’électricité minute par minute 😉

Publié dans embarqué, informatique, Non classé | Marqué avec , , , | Laisser un commentaire

Piloter un servo-moteur avec le kit HiFive1 à cœur Risc-V

Pour prendre la main sur une nouvelle plate-forme électronique, la manip de base (hello world) est de faire clignoter une led. C’est vrai qu’avec une simple led on peut déjà «afficher» quelques informations, il suffit pour cela de la faire clignoter de plusieurs manières différentes pour obtenir l’état du système que l’on veut connaître.

C’est simple, c’est visuel et c’est rigolo. Seulement c’est vraiment très basique et on pourrait innover un peut dans le «Hello World de l’électronique». Par exemple en faisant bouger un servomoteur !

Le signal de commande d’un servo-moteur est assez simple, il faut envoyer une pulsation de largeur 1ms (min) à 2 ms (max) toute les 20ms.

Si on utilise un petit servo-moteur en 5v comme celui-là en plus, il suffit de l’alimenter par le 5 volt du kit et ça roule.

On trouve des propositions de montages pour piloter des servomoteurs sur le site d’arduino, mais le code donné ne fonctionne pas (encore?) avec le HiFive1 puisque la bibliothèque Servo n’est pas implémentée pour le Risc-V.

Avec un microcontrôleur comme le Hifive1 même pas besoin d’utiliser des trucs compliqués comme les PWM ou les timer. En effet le core pédale tellement vite (320Mhz) qu’une simple commutation dans la boucle principale avec des délais bien ajustés suffisent à générer le signal de pilotage correctement.

Pour un essais rapide, on peut simplement utiliser l’IDE d’arduino comme je l’avais expliqué dans un précédent article.

La fonction générant le signal utilise des delayMicroseconds():

void servo(int pos){
  digitalWrite(pwmpin, HIGH);
  delayMicroseconds(pos);
  digitalWrite(pwmpin, LOW);
  delayMicroseconds(16000); 
  delayMicroseconds(4000); 
}

D’après la doc la fonction de delaymicroseconds ne peut pas attendre plus de 16383 microsecondes. Du coup pour dépasser les 20ms on va l’appeler deux fois 😉

Le «pilotage» du servo se fait via une entrée bouton, quand on appui sur le bouton le servomoteur est en position minimal et quand on relâche le bouton le servomoteur se met en position maximal.


  if (readbtn == HIGH) {
   servo(1000);
  } else {
   servo(2000);
  }

Le code complet:


int pwmpin = 9; // pwm servo pin
int btnpin = 7; // «input button»
int readbtn = LOW;

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(pwmpin, OUTPUT);
  pinMode(btnpin, INPUT);
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
}

void servo(int pos){
  digitalWrite(pwmpin, HIGH);
  delayMicroseconds(pos);
  digitalWrite(pwmpin, LOW);
  delayMicroseconds(16000); 
  delayMicroseconds(8000); 
}

// the loop function runs over and over again forever
void loop() {
  readbtn = digitalRead(btnpin);
  if (readbtn == HIGH) {
   servo(1000);
  } else {
   servo(2000);
  }
}

Une petite vidéo du fonctionnement du montage :

Voila, c’était rigolo de bidouiller le kit HiFive1 avec l’IDE playscool d’arduino, mais maintenant il va falloir passer à des trucs plus sérieux en utilisant du code C (puis assembleur) via la toolchain gnu de compilation.

À suivre donc…

Publié dans électronique, programmation | Marqué avec , , , | Laisser un commentaire

Débutons avec le module LoFive

Pour ceux qui veulent intégrer un processeur Risc-v dans leurs produits, un module réduit nommé LoFive a été proposé en vente groupé à la fin de l’été.
Les modules viennent d’être livrés. Voici donc un petit «starting-up» pour bien débuter avec le module.

La carte de référence de la société SiFive pour utiliser le E310 est le Hifive1 compatible arduino. Cependant si l’on veut intégrer le E310 dans un montage perso il peut être préférable d’utiliser un module comme le LoFive.

La société Qwerty embedded design proposait un kit complet pour jouer avec un riscv, en plus du module LoFive, on pouvait aussi avoir la plaque d’essais, les câbles et le convertisseur usb-ftdi/jtag.

Pour pouvoir programmer le composant il faut donc d’abord faire un petit montage en suivant le pinout donné sur la page du sdk permettant de brancher le JTAG ainsi que l’uart du ftdi vers le lofive.

Pour ma part j’ai tenté quelque chose d’artistique comme on peut le voir sur l’image suivante:

Branchement de l’adaptateur uart/Jtag ftdi sur le module LoFive

Pour la partie «informatique» il faut télécharger et compiler un dérivé du sdk hifive qu’on trouve sur github. On espère qu’une pull-request permettra de merger ce fork rapidement avec le freedom-sdk «officiel» utilisé pour le hifive. Parce que compiler deux sdk c’est lourd 😉

Pour le télécharger rien de plus simple, il suffit de lancer la commande suivante :

git clone --recursive https://github.com/sifive/freedom-e-sdk.git

Puis d’attendre, parce qu’il y a quelques git à télécharger. Pour le compiler c’est indiqué sur le github, il suffit de faire ça (après avoir installé tous les packets debian/ubuntu indiqué sur le github):

cd freedom-e-sdk
make tools [BOARD=freedom-e300-lofive]

Puis attendre de looooongues minutes (plus de 60 en fait chez moi…).

Les programmes de démo se trouvent dans le répertoire software/ et on peut les compiler en indiquant leur nom à make:

make software upload PROGRAM=demo_gpio BOARD=freedom-e300-lofive-blank

La commande termine avec une erreur, mais le programme démarre quand même …

Publié dans électronique, embarqué, informatique | Marqué avec , , , | Laisser un commentaire

Prise en main d’un module NodeMCU (ESP8266)

Dans l’objectif final de faire le relevé de mon compteur d’eau, j’ai investi dans un module NodeMCU. Ce module permet de faire du microcontrôleur connecté sur son réseau wifi. Ce qui est parfait pour faire de l’IoT, surtout quand on voit le prix de l’engin (inférieur à 10€).

Découverte du kit

Marquage sous le NodeMCU

Le marquage indique un baudrate de 9600 baud. Mais cela ne semble pas marcher.

L’interface USB du module est juste un convertisseur USB-UART, qui est vu comme un ttyUSB0 sur ma debian:

$ sudo dmesg
[50235.509550] usb 1-1: new full-speed USB device number 5 using xhci_hcd
[50235.680785] usb 1-1: New USB device found, idVendor=10c4, idProduct=ea60
[50235.680788] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[50235.680790] usb 1-1: Product: CP2102 USB to UART Bridge Controller
[50235.680792] usb 1-1: Manufacturer: Silicon Labs
[50235.680793] usb 1-1: SerialNumber: 0001
[50235.688967] cp210x 1-1:1.0: cp210x converter detected
[50235.690454] usb 1-1: cp210x converter now attached to ttyUSB0

Si l’on tente de se connecter avec le baudrate indiqué sur le module (9600 bauds) on n’obtient (presque) que des caractères spéciaux.

Message obtenu après s’être connecté au module et appuyé sur le bouton reset:

r$$��|�l�|�
               $�p�|�p�s�c�p
                                �p�o�loo���
                                            cp�l`{$p�N��d"N��N�"��nn�l� l`�22oo
                                                                                                 l`Nr����{r$p�N�r����



                                                                                                                               b
                                                                                                                                n�|쎟�
                                                                                                                                       ��oo�
                                                                                                                                            d �no
                                                                                                                                                     l`or�{$p�N�r�������

            c
             o�|��
                   c��NN�$ �nn
                                    l`o{�{�$ r��n

                                                        �l`{d��o���NN����brnnn�l�cl
                                                                                       �2�������
                                                                                                         lllsd
                                                                                                               ���d$N��

                                                                                                                            �l���ld
                                                                                                                                    ��$��N�n�lbc���ld��B
                                                                                                                                                          ��d$p"�"r��nc{cr���d cd $����n�|��ol��|�$
                                     l`sl����N��r��N|�$$l��r�d�d�d ��r�d�d�


                                                                                      l`�œN�l
                                                                                              �

                                                                                                ll`sl{l��cc
                                                                                                             ��"�"B{�B��o��2oo�l��
                                                                                                                                            l
                                                                                                                                             ��l� ll����$�N���BB
                                                                                                                                                                   l
                                                                                                                                                                    l
                                                                                                                                                                     c
                                                                                                                                                                      ��cc
     l�"rlr$
ready

Le dernier mot s’affiche en texte clair.

Le point d’accès wifi est lui visible avec le nom FaryLink_3818DF.

Le premier objectif de la prise en main du kit est de faire en sorte que le module se connect à ma box wifi. Il faut donc trouver un moyen de lui communiquer le SSID ainsi que le mot de passe.

Programmation avec l’ide arduino

Il n’est pas facile de trouver des tutoriels autre que vidéos pour prendre en main ce kit. Apparemment la méthode utilisée pour développer sur nodeMCU passe par l’IDE de Arduino : stretch. Il faut donc commencer par l’installer, puis le configurer avec les paramètres du node.

L’installation de l’ide arduino est hyper simple sous debian :

sudo apt install arduino

Et voila… Par contre il faut ensuite le configurer pour NodeMCU !

Déjà on ajoute le port série à l’ide en modifiant son fichier de préférence ~/.arduino/preference.txt:

serial.port=/dev/ttyUSB0

Pour l’instant je n’ai pas réussi à le configurer pour NodeMCU. On va donc directement passer au flashage d’un firmware plus récent.

Flashage d’un firmware récent.

Les guides pour flasher un firmware récent sont déjà plus facile à trouver.

J’ai pris la version la plus récente du firmware sur le github:

wget https://github.com/nodemcu/nodemcu-firmware/releases/download/0.9.6-dev_20150704/nodemcu_integer_0.9.6-dev_20150704.bin

Elle date un peu mais visiblement si on veut un truc plus récent il faut le compiler, et donc installer la toolchain, ce qui ne semble pas si évident.

L’outils de flashage est en python :

git clone https://github.com/themadinventor/esptool.git

Celui dispo dans debian n’a pas l’air de fonctionner pareil.

Une fois le kit branché il suffit de lancer la commande suivante :

$ sudo python esptool.py --port /dev/ttyUSB0  write_flash 0x00000 /opt/nodemcu/nodemcu_integer_0.9.6-dev_20150704.bin 
esptool.py v2.2-dev
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x0040
Compressed 450072 bytes to 290528...
Wrote 450072 bytes (290528 compressed) at 0x00000000 in 25.7 seconds (effective 139.9 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting...

Visiblement tous semble s’être bien passé, pourtant quand on appuie sur reset on obtient le message suivant sur la console :

rld��|�$�|

           �
             l�b|��r�c�p��oo�lno���
                                       cp�sdrlp�n�

                                                     �l
                                                        

                                                          c
                                                            N�|�$���on�$� $ �Nl`nr�n
                                                                                             �� p�N�
                                                                                                         r�����
                                                                                                                
                                                                                                                  bo��n�
                                                                                                                         �c��on�
                                                                                                                                  l`�o
                                                                                                                                        l nr�n{{$ p�N�
                                                                                                                                                             r�������#
 n�|

     #��no�

            $ �oo
                    $ N{��
                              �$`s��n
                                       �l �ՁMEM CHECK FAIL!!!
�r$

Visiblement ça marche pas, pourtant le point d’accès wifi est toujours visible. Du coup on va tout de même installer la toolchain.

Installation de la toolchain.

C’est pas si compliqué en fait, il suffit de télécharger le github :

git clone https://github.com/pfalcon/esp-open-sdk.git
cd esp-open-sdk

Puis de lancer make. Dans mon cas il me manquait le paquet help2man pour que ça se configure correctement :

sudo apt install help2man

Il faut ensuite patienter environ 30 minute pour compiler le tout en faisant make:

make

Et attendre qu’il nous dise que c’est bon :

[...]
net_chksum.o lwip/core/ipv4/ip_addr.o lwip/core/ipv4/ip.o lwip/core/ipv4/ip_frag.o lwip/netif/etharp.o lwip/app/dhcpserver.o espconn_dummy.o
cp liblwip_open.a /opt/nodemcu/esp-open-sdk/xtensa-lx106-elf/xtensa-lx106-elf/sysroot/usr/lib/
make[1]: Leaving directory '/opt/nodemcu/esp-open-sdk/esp-open-lwip'
cp -a esp-open-lwip/include/arch esp-open-lwip/include/lwip esp-open-lwip/include/netif \
    esp-open-lwip/include/lwipopts.h \
    /opt/nodemcu/esp-open-sdk/xtensa-lx106-elf/xtensa-lx106-elf/sysroot/usr/include/

Xtensa toolchain is built, to use it:

export PATH=/opt/nodemcu/esp-open-sdk/xtensa-lx106-elf/bin:$PATH

Espressif ESP8266 SDK is installed, its libraries and headers are merged with the toolchain

Compilation du firmware

On récupère la dernière release du firmware sur le github correspondant:

wget https://github.com/nodemcu/nodemcu-firmware/archive/2.1.0-master_20170824.tar.gz
tar -zxvf 2.1.0-master_20170824.tar.gz
cd 2.1.0-master_20170824

On exporte la toochain précédemment compilée puis on lance make :

export PATH=/opt/nodemcu/esp-open-sdk/xtensa-lx106-elf/bin:$PATH
make

Et on attend 5 minutes d’avoir une compilation sans message d’erreur.

Flashage du firmware 2.1

On peut désormais flasher le nouveau firmware aux adresses indiquées:

sudo python esptool.py --port /dev/ttyUSB0  write_flash 0x00000 ../nodemcu/nodemcu-firmware-2.1.0-master_20170824/bin/0x00000.bin
sudo python esptool.py --port /dev/ttyUSB0  write_flash 0x10000 ../nodemcu/nodemcu-firmware-2.1.0-master_20170824/bin/0x10000.bin

Une fois flashé on obtient bien une réaction du nodemcu après reset :

rd$ܞ�c�n
         �$�
               B|��p��|"�
                           c��oo�loN���bp�l rlp�o�
                                                       �
                                                         l

                                                           
                                                             cn�|���

                                                                      #��oN�l�`�N
                                                                                    $or�o
                                                                                           B$�lp�n�
                                                                                                      r�����

                                                                                                             b
                                                                                                               o�|�$

                                                                                                                     "�|�n� l �N
                                                                                                                                      l or�o
                                                                                                                                               {�$`p�N�
                                                                                                                                                           {�����
                                                                                                                                                                 
                                                                                                                                                                  n�|l쌏b��Nn�
                                                                                                                                                                                   l �2Nn
                                                                                                                                                                                           d Nr�N

                                                                                                                                                                                                   �l� {ےN

                                                                                                                                                                                                           �l� ���N천p��o|�l
                d$l`b�2��2r�l�N�
                                     �o�
                                        l ��{�p����


                                                      $ �œn�l�d�l`��s�p��
                                                                                  ld rd�o����B��cp|
                                                                                                       cp��l#��o��no�$l��l �l� d�
                                                                                                                                         �ll �o���#"ll�2B
                                                                                                                                                                ����B$
                                                                                                                                                                         �#rl{
Formatting file system. Please wait...

NodeMCU 2.1.0 build unspecified powered by Lua 5.1.4 on SDK 2.1.0(116b762)
lua: cannot open init.lua
> 
> 
> 
> ls
>> ls
stdin:2: '=' expected near 'ls'
> echo "pouet"
stdin:1: attempt to call global 'echo' (a nil value)
stack traceback:
	stdin:1: in main chunk
> reset
>> reset
stdin:2: '=' expected near 'reset'
> 
> print("Coucou")
Coucou
>

On a bien la main sur la console, je ne comprend toujours pas à quoi correspondent les caractères spéciaux du début par contre.

Connexion au point d’accès wifi

Une fois qu’on a la main sur la console lua la configuration du point d’accès à sa box wifi est relativement simple:

> print(wifi.sta.getip())
nil
> wifi.sta.config {ssid="MON_POINT_DACCES", pwd="fbisecurity"}
> print(wifi.sta.getip()) 
192.168.0.11	255.255.255.0	192.168.0.1

On peut également enregistrer un script lua d’initialisation :

> file.open("init.lua","w+")
> file.writeline([[print("Bienvenue chez Martoni")]])
> file.close()
> node.restart()
> 
 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x40100000, len 26820, room 16 
tail 4
chksum 0x2e
load 0x3ffe8000, len 2180, room 4 
tail 0
chksum 0xc6
load 0x3ffe8884, len 136, room 8 
tail 0
chksum 0x4a
csum 0x4a
���n��{��o|�
              dl$l #�����s�l�N��n�l ��r�d�l�
                                                        $`��{�$�$�
                                                                     l`��r�l�

                                                                                 $l rd�o��bc�|$�cbp��$b��n�noƒll��
                                                                                                                               l�$���
                                                                                                                                      �lr$�o����cBld�
                                                                                                                                                       
                                                                                                                                                        B
                                                                                                                                                         ���cBl�crl{

NodeMCU 2.1.0 build unspecified powered by Lua 5.1.4 on SDK 2.1.0(116b762)
Bienvenue chez Martoni
> 

Conclusion provisoire:

C’est mal vendu ! Parce que la prise en main n’a rien d’évident, et il faut se battre un peu pour enfin pouvoir prendre la main sur le kit. Je ne sais pas si le firmware par défaut est buggé ou si j’ai utilisé la bonne procédure mais ce fut une connexion compliqué.

Par contre le wifi à l’air de très bien tourner.

Publié dans embarqué, informatique, programmation | Marqué avec , , , | Laisser un commentaire