Bien débuter avec Digispark sous Ubuntu/Linux

digispark21

Je ne vais pas vous décrire en détail le module Digispark, je vous laisse le soin pour cela de lire ce très bon article de mister-bidouilles.fr

Disons simplement qu’il représente une alternative de taille réduite à Arduino. Il est basé sur la puce ATTiny85, se programme avec l’IDE Arduino légèrement modifié et du code totalement similaire à Arduino (à l’exception de quelques librairies). Bref c’est idéal si votre projet ne nécessite pas plus de 6 pins (vous pouvez prototyper d’abord sur Arduino pour plus d’aisance).

Désigné et vendu par Digistump, il est également possible d’en trouver des clones pour environ 3€ (car c’est du « Open Hardware »).

Néanmoins j’ai rencontré quelques déconvenues au départ pour le faire fonctionner avec Linux (mon installation du moment: Ubuntu 14.04 64bits)

D’où cet article.

Vous trouverez la plupart des infos sur le Wiki https://digistump.com/wiki/digispark
Notamment DigistumpIDE (IDE Arduino modifié pour la prise en compte du Digispark), pour programmer votre module.
Attention petite différence avec Arduino: ne pas connecter le module en USB durant la réalisation de votre code, mais:
1. ne pas brancher le module en USB
2. programmez votre code dans l’IDE
3. vérifiez votre code
4. uploadez votre code
5. et seulement là insérez votre module sur le port USB (vous disposez de 60 secondes)
6. débranchez le module du port USB

Bon, venons-en aux problèmes rencontrés et à leurs solutions.

1. USB 2, pas USB 3 !!!

C’est ballot, mon laptop Thinkpad comporte deux types de port USB: USB2 et USB3.
Et il semble bien que le Digispark ne fonctionne pas correctement en USB3 pour communiquer avec l’IDE et le mettre à jour. Donc vérifiez bien sur quel port de votre ordinateur vous le branchez. USB2 recommandé !

2. Détection automatique du Digispark au branchement, et communication série

Dans un terminal lancer la commande: lsusb
et vous devez avoir quelque chose comme ça:

Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 037: ID 16d0:0753 MCS Digistump DigiSpark
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

puis lancer la commande: dmesg | grep tty
et vous devriez avoir quelque chose comme ça:

[129294.762275] cdc_acm 1-1.1:1.0: ttyACM0: USB ACM device
[130859.030420] cdc_acm 1-1.1:1.0: ttyACM0: USB ACM device

(Ce qui signifie qu’il y a un terminal série raccordé sur votre module Digispark via ttyACM0)
Si ce n’est pas le cas, ou bien si c’est parfois aléatoire ou que l’upload de votre code vers le module plante, mieux vaut créer une règle udev

Lancez dans une console gksudo gedit (Editeur de texte Gedit en mode root), ou kdesudo kedit (pour environnement de bureau KDE)

Coller le code suivant:

# UDEV Rules for Micronucleus boards including the Digispark.
# This file must be placed at:
#
# /etc/udev/rules.d/49-micronucleus.rules (preferred location)
# or
# /lib/udev/rules.d/49-micronucleus.rules (req'd on some broken systems)
#
# After this file is copied, physically unplug and reconnect the board.
#
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666"
KERNEL=="ttyACM*", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
#
# If you share your linux system with other users, or just don't like the
# idea of write permission for everybody, you can replace MODE:="0666" with
# OWNER:="yourusername" to create the device owned by you, or with
# GROUP:="somegroupname" and mange access using standard unix groups.

(Code source / référence de l’astuce: digistump.com/wiki/)

Et sauvegardez le fichier sous le nom « 49-micronucleus.rules » dans le dossier « /etc/udev/rules.d/ »

Puis en console lancez la commande sudo udevadm control –reload-rules pour recharger les règles Udev.
Branchez/débranchez votre Digispark et testez avec la commande dmesg | grep tty

Des binaires 32 bits dans une installation 64bits

Si vous rencontrez le problème suivant lors de l’upload de votre code sur le Digispark: micronucleus: not found
exemple:

****
Le croquis utilise 302 octets (5%) de l'espace de stockage de programmes. Le maximum est de 6 012 octets.
Les variables globales utilisent 9 octets de mémoire dynamique.
Running Digispark Uploader...
sh: 1: /cust/DEV_PERSO/Arduino/Digispark/arduino-1.5.8-64bit/hardware/digistump/avr/tools/micronucleus: not found
Plug in device now... (will timeout in 60 seconds)
****

Alors c’est que votre installation de DigistumpIDE comporte un fichier binaire incorrect de micronucleus, une version 32bits… Hum, oui dans un package 64bits ce n’est pas top…

Moi en l’occurrence j’ai installé la version DigistumpIDE1.5.8C-linux64.tar.gz et j’ai eu ce problème.
Il vous faut donc soit bidouiller votre système pour que libusb fonctionne en 32bits (mouaif… non), soit récupérer le binaires 64bits. J’ai trouvé ce fichier binaires dans le forum de digistump.com à cette adresse: http://digistump.com/board/index.php/topic,1693.msg8086.html

Il faut se logguer sur le forum pour accéder au fichier, en voici donc une copie téléchargeable directement: micronucleus-linux64bits

Placer le fichier binaire micronucleus de cette archive dans le dossier /CheminDeVoteInstallation/arduino-1.5.8-64bit/hardware/digistump/avr/tools , en lieu et place du fichier micronucleus original.


Voilà, j’espère que cet article pourra dépanner quelques uns et leur éviter de s’arracher les cheveux.
Bonne programmation et bonne bidouille avec Digispark 🙂

2 thoughts on “Bien débuter avec Digispark sous Ubuntu/Linux”

  1. SPERI Hubert says:

    Bonjour,

    J’essaie depuis 2 jours de faire fonctionner le petit circuit DIGISPARK… en vain.
    Votre article est pourtant très clair mais j’ai dû rater quelque chose.

    J’utilise :
    — UBUNTU 16.04, 32bits sur Lenovo ThinkPad T60
    — navigateur Chromium.
    — BLOCKLY@RDUINO en ligne sur http://www.blockly.technologiescollege.fr/
    — j’ai installé CodeBender comme appli de Chromium, et je l’ai activé.

    Avec la commande lsusb et Digispark branché sur le port USB j’obtiens :
    … …
    … ID 16d0:0753 MCS Digistump DigiSpark
    … …
    Donc c’est OK
    Ensuite, avec la la commande: dmesg | grep tty, je n’obtiens pas ce qui est prévu :
    [ 0.000000] console [tty0] enabled
    [ 11.439472] systemd[1] : create slice system-getty.slice.
    ???
    Malgré cela je créé le fichier 49-micronucleus.rules suivant (sans les commentaires) :

    SUBSYSTEMS== »usb », ATTRS{idVendor}== »16d0″, ATTRS{idProduct}== »0753″, MODE:= »0666″
    KERNEL== »ttyACM* », ATTRS{idVendor}== »16d0″, ATTRS{idProduct}== »O753″, MODE:= »0666″, ENV{ID_MM_DEVICE_IGNORE}= »1″

    (idvendor et idproducts sont ceux que l’on voit dans la commande lsusb, les même que dans votre tuto).

    Je sauvegarde le fichier sous le nom « 49-micronucleus.rules » dans le dossier « /etc/udev/rules.d/ »
    (je vérifie : il y est bien et avec le bon contenu, sans les commentaires)

    Puis en console je lance la commande sudo udevadm control –reload-rules pour recharger les règles udev.
    Ensuite je branche puis je débranche le module Digispark.
    Nouvel essai avec dmesg | grep tty

    Cette fois, la commande dmesg | grep tty ne me renvoie strictement rien.

    La commande ls /dev/tty* me renvoie une liste de ports qui va de tty à tty64 et de ttyS2 à ttyS31.
    On ne voit pas de ttyACM0

    Dans BLOCKLY@RDUINO/Arduino code j’ai chargé le petit programme pour faire clignoter une LED.
    — j’ai changé le n° de la broche de sortie, de 13 en 0
    — j’ai sélectionné Attiny85 (8 mHz internal osc….)
    — j’ai demandé « Verify code » ==> c’est OK.

    Même après redémarrage de UBUNTU, le bouton [ >uploaod in Arduino] reste désespérément bleu pâle et je ne peux pas charger le programme dans l’Attiny85. (que je n’ai pas oublié de rebrancher comme indiqué dans le tuto).

    QU’EST-CE QUE J’AI RATE ?

    Première question :
    Le petit module DIGISPARK AtTiny85 (le modèle représenté en tête du tuto ou celui avec la prise mini-USB) est-il oui ou non programmable DIRECTEMENT en étant branché dans le port USB (sans programmateur additionnel ou sans passer par une ARDUINO UNO) ?

    Deuxième question :
    Faut-il utiliser autre chose que l’IDE en ligne http://www.blockly.technologiescollege.fr/blockly@rduino/?lang=fr ?

    Troisième question :
    Si — comme je l’espère — la programmation du petits module DIGISPARK peut se faire directement, elle n’utilise que 2 fils : D+ et D- (en plus de l’alim 5V)
    Tous les programmateurs qui utilisent par exemple une ARDUINO UNO utilisent 4 fils en plus de l’alim.
    Question : peut-on envisager de programmer et reprogrammer un Attiny « sur son montage » en utilisant la même méthode que vous décrivez, c’est-à-dire avec seulement D+ et D- et l’alim (comme on le fait avec PICAXE) moyennant bien sûr un aménagement des connexions ?

    Merci d’avance de vos réponses.

  2. tof says:

    @Hubert

    1. Oui il est possible de programmer le Digispark directement depuis un port USB.
    Le Digispark est équipé d’un bootloader (micronucleus) qui permet de le programmer directement depuis l’USB sans besoin d’un programmeur hardware supplémentaire AVR/Arduino-Uno (c’est l’avantage de ce module par rapport à une puce attiny85 simple).

    Dès qu’il est branché, le bootloader s’active pendant les 5 premières secondes en mode « flashage », s’il n’y a pas de commande de flashage qui lui parvient, il démarre alors en mode normal et exécute le code qui lui a été chargé.

    Cela induit des spécificités:
    – lorsque vous branchez votre montage, il y aura toujours un délais de 5 secondes à chaque démarrage, réservé à la possibilité de flashage.
    – la programmation est juste un peu différentes dans l’IDE Arduino: la séquence de flashage n’étant réservé que pendant les 5 premières secondes, ce n’est pas possible de laisser brancher le Digispark au port USB et de lui envoyer du code ensuite.
    –> ne pas brancher le Digispark tout de suite, mais lancer le téléversement du code (sans rien branché dans le port USB) et là seulement quand Arduino IDE vous demande de le brancher vous avez 60 secondes pour le faire et le téléversement du code commence effectivement.

    2. Je ne connais pas Blockly, c’est possible qu’il ne puisse pas utiliser le Digispark directement. Si Blockly repose sur CodeBender alors c’est cuit !(CodeBender ne supporte pas le Digispark).

    Je vous recommande d’utiliser Arduino IDE pour programmer votre Digispark, c’est je pense l’outil de programmation le plus adapté.

    Je m’aperçois que je devrais changer un peu mon tuto, car pour les versions supérieures à 1.6 d’Arduino IDE, il y a désormais la possibilité de gestion de cartes supplémentaires plus facilement (avec intégration de leurs outils de flashage dédié).

    Procédure pour Digispark (mais c’est le même principe que pour ESP8266 ou autres) :
    Installer la dernière version d’Arduino IDE: https://www.arduino.cc/en/Main/Software
    Puis dans le le menu Fichiers > Préférences > URL de gestion des cartes supplémentaires
    ajouter cette adresse: http://digistump.com/package_digistump_index.json

    Ensuite, dans Outils > Type de carte > Gestionnaire de carte –> dans la liste choisir d’installer « Digistump AVR Boards »
    Vous pourrez ainsi choisir le Digispark pour votre programmation dans le menu Outils > Type de carte > Digispark (Default – 16.5Mhz)

    Note utile: le Digispark dispose d’une petite LED rouge intégrée au circuit (et raccordée au pin 1) !!!
    Aussi pour s’assurer que la programmation fonctionne bien, on peut initialement utiliser cette LED intégrée pour un 1er test, sans se soucier de faire d’autres raccordements de composants 😉

    Exemple de code « blink » pour faire clignoter la LED intégré:
    void setup() {
    // initialize the digital pin as an output.
    pinMode(1, OUTPUT); //LED on Model A
    }
    // the loop routine runs over and over again forever:
    void loop() {
    digitalWrite(1, HIGH); // turn the LED on (HIGH is the voltage level)
    delay(1000); // wait for a second
    digitalWrite(1, LOW); // turn the LED off by making the voltage LOW
    delay(1000); // wait for a second
    }

    3. Je vous avoue ne pas saisir votre 3ième question…
    Mais le Digispark est assez différent d’une puce Attiny85 simple: on prépare son code et on le charge via le software Arduino IDE, on branche le Digispark sur le port USB et hop c’est bon le code est dans la puce. Pas besoin d’autres branchements ou de fils pour le programmer 😉

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *