Remote Pinetime n'est plus en fonctionnement. Merci à tous d'avoir testé Pinetime distant!
Remote Pinetime est une montre intelligente Pinetime à Singapour qui est configurée pour permettre à quiconque dans le monde de clignoter et de tester le micrologiciel à distance.
Le bot pinetime distant (créé dans Rust) regarde un groupe télégramme pour clignoter des commandes et clignote le firmware à Pinetime.
L'affichage sur PineTime est diffusé en direct sur YouTube, afin que vous puissiez regarder votre firmware fonctionner en direct sur mon pinetime.
Pour flasher votre propre firmware et tester Pinetime, rejoignez le groupe télégramme "Remote Pinetime": https://t.me/remotepinetime
Le journal clignotant (d'OpenOCD) et le journal des messages de débogage (à partir de la semihosting ARM) seront affichés dans le canal télégramme "Remote Pinetime Log" ici: https://t.me/remotepinetimeLog
Regardez la vidéo de démonstration sur YouTube
Pour flasher un fichier binaire firmware https://.../firmware.bin à pinetime à l'adresse 0x0 ...
/flash 0x0 https://.../firmware.bin
Cela fonctionne pour toute URL qui n'est pas protégé par la connexion.
Ne passez pas les URL pour les artefacts créés par les actions GitHub. Ils nécessitent une connexion et le bot télégramme sera bloqué.
Au lieu de cela, copiez les artefacts et téléchargez-les sous "Releases", qui n'est pas protégé par la connexion.
Certaines saveurs de firmware Pinetime nécessitent un chargeur de démarrage, comme McUboot ou SoftDevice. Flash le chargeur de démarrage pour aborder 0x0 d'abord, puis flasher le firmware.
Le firmware compatible McUboot doit être flassé pour s'adresser à 0x8000
Pour flasher une évasion sur Pinetime ...
/flash 0x0 http://tt-392.space/breakout.hex
Vidéo de démonstration de Breakout sur Pinetime
Pour flasher le visage de la montre dessinée à la main ...
/flash 0x0 https://github.com/lupyuen/pinetime-rust-mynewt/releases/download/v5.0.4/mynewt.elf.bin
/flash 0x8000 https://github.com/lupyuen/pinetime-rust-mynewt/releases/download/v7.0.1/my_sensor_app.img
En savoir plus sur le visage de la montre dessinée à la main
Pour flasher un firmware infini "soufflé par l'esprit" modifié qui ne dort jamais ...
/flash 0x0 https://github.com/lupyuen/pinetime-rust-mynewt/releases/download/v5.0.4/mynewt.elf.bin
/flash 0x8000 https://github.com/AntonMadness/Pinetime/releases/download/v0.1.1/pinetime-mcuboot-app-img.bin
Ceci a été modifié en modifiant src/DisplayApp/DisplayApp.cpp pour supprimer tous les appels aux case Messages::GoToSleep:
Pour flasher de la rouille sur le firmware MyNewt qui émet des messages de débogage semi-bostaux ...
/flash 0x0 https://github.com/lupyuen/pinetime-rust-mynewt/releases/download/v5.0.4/mynewt.elf.bin
/flash 0x8000 https://github.com/lupyuen/pinetime-rust-mynewt/releases/download/v5.0.7/my_sensor_app.img
Pour flasher de la rouille sur Riot ...
/flash 0x0 https://github.com/lupyuen/pinetime-rust-riot/releases/download/v1.0.3/PineTime.bin
Pour flasher McUboot Bootloader 5.0.4 ...
/flash 0x0 https://github.com/lupyuen/pinetime-rust-mynewt/releases/download/v5.0.4/mynewt.elf.bin
Parfois, Pinetime sera verrouillé en raison d'erreurs du micrologiciel. Le clignotant le Booloader McUboot ci-dessus devrait réparer le verrouillage.
Pour construire votre propre firmware dans un navigateur Web (sans installer aucun IDE ou chaîne d'outils), consultez les articles ...
Construisez le micrologiciel Pinetime dans le cloud avec des actions GitHub
Aperçu des visages de montre PineTime dans votre navigateur Web avec WebAssembly
À quoi ressemble le clignotement en télégramme ...
Regardez la vidéo de démonstration sur YouTube
Vous avez des questions sur Pinetime? Discutez avec la communauté Pinetime sur Matrix / Discord / Telegram / IRC ...
https://wiki.pine64.org/index.php/pinetime#community
Découvrez mes articles PineTime
Parce qu'il est difficile et coûteux d'expédier du matériel réel dans le monde pendant la pandémie ... et les tests de firmware à distance pourraient être la solution.
Remote Pinetime a été créé pour permettre aux gens d'apprendre et d'expérimenter le codage de la smartwatch sans avoir une vraie smartwatch.
Découvrez ma présentation vidéo ...
Riot Summit 2020 - Programmes intégrés plus sûrs et plus simples avec de la rouille sur une émeute
ARM Semihosting permet à notre firmware d'émettre des messages de débogage en invoquant l'instruction ARM Cortex-M bkpt .
Consultez cette implémentation de la semi-altération des bras de pinetime-rust-mynewt ...
/// Send an ARM Semihosting command to the debugger, e.g. to print a message.
/// To see the message you need to run opencd:
/// openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -f scripts/debug.ocd
static int __semihost ( int command , void * message ) {
// Warning: This code will trigger a breakpoint and hang unless a debugger is connected.
// That's how ARM Semihosting sends a command to the debugger to print a message.
// This code MUST be disabled on production devices.
__asm(
"mov r0, %[cmd] n"
"mov r1, %[msg] n"
"bkpt #0xAB n"
: // Output operand list: (nothing)
: // Input operand list:
[ cmd ] "r" ( command ),
[ msg ] "r" ( message )
: // Clobbered register list:
"r0" , "r1" , "memory"
);
return 0 ;
} Nous appelons __semihost() comme ça: semihosting_console.c
/// ARM Semihosting Command
#define SYS_WRITE (0x5)
/// Write "length" number of bytes from "buffer" to the debugger's file handle fh.
/// We set fh=2 to write to the debugger's stderr output.
static int semihost_write ( uint32_t fh , const unsigned char * buffer , unsigned int length ) {
// If debugger is not connected, quit.
if (! debugger_connected ()) { return 0 ; }
if ( length == 0 ) { return 0 ; }
uint32_t args [ 3 ];
args [ 0 ] = ( uint32_t ) fh ;
args [ 1 ] = ( uint32_t ) buffer ;
args [ 2 ] = ( uint32_t ) length ;
return __semihost ( SYS_WRITE , args );
}
/// Return non-zero if debugger is connected. From repos/apache-mynewt-core/hw/mcu/ambiq/apollo2/src/hal_system.c
static int debugger_connected ( void ) {
return CoreDebug -> DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk ;
}Quand nous appelons ...
/// Write "hellon" (6 characters) to the debugger's stderr output.
#define SEMIHOST_HANDLE 2
semihost_write ( SEMIHOST_HANDLE , ( const unsigned char * ) "hellon" , 6 ); Nous verrons le message hello apparaît dans OpenOCD et le journal pinetime distant. (Les messages doivent se terminer avec une nouvelle ligne ou ils n'apparaîtront pas)
La semi-altération des bras doit être activée dans OpenOCD. Voici comment la pinetime distant permet à ARM Semihosting: flash-log.ocd
# Arm Semihosting is used to show debug console output and may only be enabled after the init event.
# We wait for the event and enable Arm Semihosting.
$_TARGETNAME configure -event reset-init {
echo "Enabled ARM Semihosting to show debug output"
arm semihosting enable
}
Le semi-bossé des bras peut être lent ... l'intégralité du microcontrôleur se fige tandis que le message de débogage est transmis par caractère par caractère à OpenOCD via le port SWD.
Nous vous recommandons d'utiliser un tableau statique pour tamponner les messages sortants en mémoire.
Dans l'implémentation pinetime-rust-mynewt de la semi-altitude de bras, nous utilisons MYNEWT MBUFS pour tamponner efficacement les messages.
N'utilisez pas le semi-altération du bras lorsque le traitement Bluetooth LE est en cours ... Les messages seront supprimés et que les clients Bluetooth LE se déconnecteront automatiquement.
La semi-altération des bras doit être désactivée dans le micrologiciel de production. En outre, la semi-bosette des bras peut être suspendue lorsqu'un débogueur Jlink est connecté. Pour pinetime-rust-mynewt nous désactivons le bras semihosting avec l'indicateur GCC -DDISABLE_SEMIHOSTING dans targets/nrf52_boot/pkg.yml (pour le McUboot Bootloader) et dans targets/nrf52_my_sensor/pkg.yml (pour le firmware d'application).
Pour créer votre propre bot télégramme ...
Discuter avec botfather, créer un bot nommé PineTime Bot
Entrez /mybots , sélectionnez PineTime Bot
Sélectionnez Edit Commands , entrez flash - flash 0x0 https://.../firmware.bin
Pour exécuter votre propre bot télégramme: clone ce repo et exécuter ceci dans un script shell ...
# Set your Telegram Bot Token
export TELEGRAM_BOT_TOKEN= ???
# This is needed to fix the h2 / indexmap build error "ids: IndexMap<StreamId, SlabIndex> expected 3 type arguments"
export CARGO_FEATURE_STD=1
# Show Rust stack trace
export RUST_BACKTRACE=1
cd ~ /remote-pinetime-bot
for (( ; ; ))
do
git pull
pkill openocd
cargo run
echo " ---------ERROR-------- "
sleep 30
doneLe bot Telegram appelle Pinetime Updater et Xpack OpenOCD pour flasher le firmware à Pinetime via SWD.
Pour télécharger XPack OpenOCD (pour Mac) ou OpenOCD SPI (pour Raspberry PI), regardez pinetime-updater/run.sh
Le Bot Telegram fonctionne actuellement sur Raspberry Pi avec Xpack OpenOCD (au lieu d'OpenOCD SPI). Xpack OpenOCD pour Raspbian 32 bits a été téléchargé à partir d'ici
Le pilote USB pour ST-Link a été configuré sur Raspbian comme ainsi ...
# For Linux Only: Install UDEV Rules according to https://xpack.github.io/openocd/install/#udev
sudo cp xpack-openocd/contrib/60-openocd.rules /etc/udev/rules.d/
sudo udevadm control --reload-rulesPour diffuser en direct votre appareil photo Raspberry Pi sur YouTube: exécutez ceci dans un script shell ...
for (( ; ; ))
do
raspivid -n -o - -t 0 -vf -hf -fps 30 -b 6000000 |
ffmpeg -re -ar 44100 -ac 2
-acodec pcm_s16le -f s16le -ac 2
-i /dev/zero -f h264 -i - -vcodec copy -acodec aac -ab 128k -g 50 -strict experimental
-f flv rtmp://a.rtmp.youtube.com/live2/YOUR_YOUTUBE_STREAM_KEY
sleep 1
doneBasé sur https://www.makeuseof.com/tag/live-stream-youtube-raspberry-pi/
Utilisez une connexion réseau filaire au lieu du WiFi ... car l'activation du four à micro-ondes perturbera le réseau WiFi 2,4 GHz et terminera votre flux en direct YouTube. (Et votre URL sur le flux en direct YouTube changera)
Voici la configuration de streaming en direct avec (de gauche à droite) Raspberry Pi 4, Raspberry Pi V2 Camera Module (8 MP), deux lunettes d'agrandissement, Pinetime avec broches Pogo (pointes pointues) et ST-Link V2 ...
Couvrir avec une enceinte papier-mâché pour bloquer le reflet sur les lunettes d'agrandissement (comme un télescope) ...
Comment faire l'enceinte Papier-Mâché ...
Positionnez le Raspberry Pi, le module de la caméra, deux lunettes de grossissement et Pinetime
Construisez un échafaudage en reposant une enveloppe sur le Raspberry Pi, un module de caméra et des lunettes de magnificence
Complétez l'échafaud en posant un morceau plié de papier de taille A4
Collez des bandes de serviette en papier sur l'échafaudage, assurez-vous de couvrir Raspbery Pi. J'ai créé la pâte en mélangeant une demi-tasse de farine avec une demi-tasse d'eau.
Laissez le papier-mâché sec pendant la nuit pour former la forme de l'enceinte. Coupez le papier-mâché avec des ciseaux. Micro-ondes le papier-mâché pour le sécher.
Collez une deuxième couche de bandes de serviettes en papier, de manière ordonnée.
Microwave the Papier-Mâché pendant une minute, laissez-le refroidir. Utilisez des bols renversés pour soutenir la structure. Répétez 3 fois jusqu'à ce que le papier-mâché soit sec.
Coupez l'enceinte Papier-Mâché avec des ciseaux.
Y a-t-il des problèmes de sécurité exposant un bot télégramme au monde pour le clignotement et les tests?
Nous atténuons autant que possible les risques de sécurité ...
Notre bot télégramme est construit avec Rust, un langage de programmation de systèmes sécurisés.
Découvrez le code source de la rouille sur src/main.rs
Aucun accès à distance à l'hôte n'est autorisé. Le Bot Telegram interroge uniquement les commandes pour /flash les exécute et les exécute.
Les fichiers temporaires sont automatiquement supprimés après utilisation avec la bibliothèque tempfile . Nous réduisons donc l'exposition de fichiers avec des logiciels malveillants.
Mais il y a une préoccupation ... Notre Pinetime peut être flashé avec des logiciels malveillants qui attaque d'autres appareils Bluetooth à proximité.
Pour l'éducation de l'IoT ... je vais le permettre! :-)
Je suis pleinement conscient des risques lorsque j'utilise ce service gratuit. Et si vous choisissez d'exploiter votre propre pinetime distant, vous devez également être conscient des risques.
Il y a un problème de sécurité sérieux concernant le support semi-bossé: l'API Semihosting prend en charge la lecture, l'écriture et l'exécution de fichiers sur l'hôte OpenOCD (Raspberry Pi).
Ce problème de sécurité n'a pas été résolu. La solution de contournement consiste à désactiver le support semi-bossé dans OpenOCD, qui désactiverait également les messages de débogage.
Écrivez le journal de débogage semihosting à un canal télégramme séparé
Agrandir le nombre de messages semi-bostaux qui seront enregistrés sur le canal télégramme (agrégats et transmet les messages en tant que demande de télégramme toutes les 5 secondes)
Autoriser le journal de débogage semi-bossé et le clignotement du firmware coexistant (ils utilisent tous les deux OpenOCD)