Prima di usare la motor shield per WeMos è necessario eseguire un wemos motor shield firmware update.
In pratica dopo aver acquistato la versione 1.0 della motor shield ho provato uno degli sketch di esempio che viene fornito con la libreria di controllo e mi sono accorto che i motori non rispondevano ad alcun comando, non ricevevano alcun segnale per muoversi.
Ho riletto più volte la wiki del produttore in cerca di qualche info sull’inizializzazione della scheda ed ho trovato molte info utili come:
oltre alla libreria usata per controllare la scheda e testare la sheld.
Purtroppo la wemos motor che ti mostro è la versione 1.0 ed è già stata rilasciata la versione 2.0 che presenta alcune migliorie come, ad esempio:
- la possibilità di montare dei connettori dotati di viti per l’alimentazione esterna e per i motori;
- l’adesione allo standard LOLIN della WeMos;
- il controllo dello StanBy solo in I2C, nella versione 1.0 puoi decidere se usare un pin o l’IIC;
- la mancanza della gestione dell’indirizzamento i2C, che nella vesione 2.0 è fisso;
- la presenza del connettore JTAG;
ma nulla in merito al mancato funzionamento della versione 1.0.
Verifica dell’indirizzo I2C
Usa lo sketch per la scansione degli indirizzi I2C, pubblicato e descritto in questo articolo, per comprendere se fosse un problema di indirizzo.
Scoprirai, probabilmente, che la shield non viene riconosciuta con nessuno degli indirizzi previsti ( 0x30, 0x2D, 0x2E, 0x2F ) ed apparentemente non funziona.
A questo punto il dubbio, iniziale, in merito alla presenza del link al firmware da caricare sull’STM32F030F4 possa servire ad eseguire un wemos motor shield firmware update è dipanato ed è certo che in qualche modo sarà necessario caricare il nuovo firmware sulla shield.
Wemos motor shield firmware update
L’update del firmware puoi eseguirlo servendoti di una interfaccia USB to Serial come questa:
dotato di almeno 4 contatti: Tx,Rx,Vcc e Gnd.
In particolare è necessario che l’adattatore sia funzionante a 3,3v in quanto l’STM32 lavora con tale tensione di alimentazione:
quello a mia disposizione dispone di un selettore a ponticello che permette di utilizzarlo sia a 5v sia 3,3v.
Ho cercato poi in internet se qualcun’altro avesse eseguito questa operazione ed ho trovato un articolo molto interessante: 18439-motor-shield-reprogramming in cui è descritto passo passo sia la procedura per compilare il firmware, ottenendo un .bin, sia quella di wemos motor shield firmware update.
In modo particolare, e molto utile, scoprirai che esiste un firmware migliorato scritto da pbugalski e di cui è disponibile una versione già compilata wemos_motor.bin
Ho provato ed utilizzato tale firmware e la procedura descritta.
Eseguire l’update del firmware
Per eseguire il wemos motor shield firmware update è in primo luogo necessario collegare il pin RTS ai 3,3v come in figura:
io ho utilizzato un filo in rame attorcigliato tra i due fori/contatti.
Poi collegare l’adattatore come descritto:
Wemos Motor Shield | Adattatore USB-Serial |
3v3 | Vcc o Vselelected ( 3,3v ) |
Gnd | Gnd |
D2 | Tx |
D1 | Rx |
Ti occorre ora il comando per l’upload:
stm32flash
che ho installato sulla mia debian 9 con un semplice
apt-get install stm32flash
adesso che hai tutti gli strumenti ti basta connettere la board all’adattatore USB-Seriale e quest’ultimo al computer.
Quindi esegui il comando:
stm32flash /dev/ttyUSB0
avendo cura di verificare che la scheda sia correttamente visualizzata come /dev/ttyUSB0, in caso fosse una ttyUSBx ( in cui x è un numero successivo a 0 ) dovrai sostituire nel comando il valore corretto del device.
Se la scheda è stata correttamente visualizzata vedrai una schermata come la seguente
in cui il wemos motor shield firmware update ti mostra le informazioni relative all’STM32F03xx4/6.
Puoi procedere prima a sbloccare la motor shield con il comando:
stm32flash /dev/ttyUSB0 -k
il cui risultato è simile al seguente:
e successivamente a mettere la flash in modalità di scrittura abilitandola con il comando:
stm32flash /dev/ttyUSB0 -u
che ti mostra un messaggio simile al seguente:
in cui noti la frase: Write-unprotecting flash.
Procedi quindi ad eseguire l’upload del firmare aggiornato usando il comando:
stm32flash /dev/ttyUSB0 -v -w motor_shield.bin
a cui passi come ultimo parametro il file .bin che ha scaricato o compilato, il risultato è il seguente:
la wemos motor shield firmware update è conclusa e puoi procedere a togliere tutti i ponticelli ed il collegamento con l’adattatore USB-Seriale.
Test I2C della Wemos Motor Shield
il test lo puoi eseguire collegando la wemos motor shield ad una scheda wemos su cui hai caricato lo sketch di riconoscimento I2C ed otterrai un messaggio simile al seguente:
sul monitor seriale dell’IDE Arduino.
Finalmente la shield è pronta per essere utilizzata nei tuoi progetti e riconosciuta sull’indirizzo I2C 0x30 come default.
8 commenti
Vai al modulo dei commenti
Ho preso da poco questo shield anche io, tempo permettendo vedrò se c’è già un firmware o se andra installato come hai fatto tu.
Dallo schema elettrico vedo che il pin che sulla shield è segnato come RTS in realtà è il boot0, come si legge nello schema elettrico, messo a 3.3V abilita il bootloader seriale che su molti STM32 sta su ROM.
Autore
Ottimo Zoomx,
fammi sapere se la tua versione presenta già un firmware.
Scusa il lungo tempo passato ma ho avuto prima un problema: ho saldato tutti i pin al contrario! Quindi ho perso tempo per dissaldarli e rimontarli, notando che nel modo giusto il chip va sotto ma soprattutto vanno sotto anche parte delle scritte. Poi ho preso anche una ESP32-CAM e sono stato distratto da quella.
Tornando a noi. Carico il programma I2Cscanner e non trova nulla. Poiché l’ESP8266 non ha I2C hardware ne ho realizzato una versione dichiarando esplicitamente i pin, l’ho provata e non ho ottenuto nulla.
Allora ho seguito la tua guida cambiando alcune cose. Innanzitutto controllando lo schema ho visto che i pin T e R sono proprio quelli della seriale dell’STM32 per cui ho usato quelli invece di D1 e D2
Per il flash, avendo Windows, ho usato l’STFlash loader demonstrator (è richiesta l’iscrizione anche se gratuita)
https://my.st.com/content/my_st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-programmers/flasher-stm32.html
Io ho la versione 2.7.0 che non ha riconosciuto la MCU per cui ho scaricato la 2.8.0 che è l’ultima versione che infatti aggiunge il supporto per altre MCU ma nonostante questo non sono riuscito ad andare oltre.
Poiché il mio adattatore USB-seriale va si a 3.3V ma non fornisce corrente a 3.3V (solo 5) ho provato alimentandolo montato sulla Wemos.
Non ha funzionato.
Ho quindi usato un adattatore per ESP01 che all’inizio non ha funzionato, poi ho cambiato porta USB e ha funzionato al primo colpo. PRobabilmente la colpa è del cavo di prolunga USB perché il PC sta sotto al tavolo.
Ricaricato il programma I2Cscanner trovo il dispositivo all’indirizzo 0x30.
Che dire, se non ci fosse stato il tuo post sarei impazzito un po’, soprattutto per trovare un firmware già pronto.
Ma si apre la porta a possibili modificazioni.
Autore
Grazie Zoomx per aver condiviso la tua esperienza in merito all’update del firmware da Windows.
Per scrupolo avevo scaricato il contenuto della flash: tutti FF!
Autore
Ottima intuizione, anche io l’ho fatto per sicurezza prima di provare quanto descritto nel tutorial.
Qui
https://github.com/thomasfredericks/wemos_motor_shield
viene spiegato come usare la stessa wemos D1 mini come adattatore USB-seriale.
Autore
Ciao Zoomx,
grazie per la condivisione del link, potrà essere utile a molti