Die Remote -Pinetime ist nicht mehr in Betrieb. Vielen Dank an alle für das Testen von Remote Pinetime!
Remote Pinetime ist eine Pinetime Smart Watch in Singapur, die es jedem auf der Welt ermöglicht, Firmware remote zu blinken und zu testen.
Der Remote Pinetime Bot (in Rust erstellt) beobachtet eine Telegrammgruppe zum Blinken von Befehlen und blinkt die Firmware auf Pinetime.
Das Display auf Pinetime wird live auf YouTube gestreamt, sodass Sie Ihre Firmware live auf meiner Pinetime beobachten können.
So beitragen
Das Blink -Protokoll (von OpenOCD) und Debugg Message Log (von Arm Semihosting) wird im Telegrammkanal "Remote Pinetime Log" hier angezeigt: https://t.me/remotepinetimelog
Sehen Sie sich das Demo -Video auf YouTube an
So flashen Sie eine Binärdatei in der Firmware https://.../firmware.bin an die pinetime unter adress 0x0 ...
/flash 0x0 https://.../firmware.bin
Dies funktioniert für jede URL, die nicht angemeldet ist.
Geben Sie keine URLs für Artefakte vorbei, die von GitHub -Aktionen erstellt wurden. Sie erfordern Anmeldung und der Telegrammbot wird blockiert.
Kopieren Sie stattdessen die Artefakte und laden Sie sie unter "Releases" hoch, die nicht durch Anmeldung geschützt sind.
Einige Geschmacksrichtungen von Pinetime -Firmware erfordern einen Bootloader wie McUBoot oder SoftDevice. Flash den Bootloader zuerst an 0x0 und dann die Firmware flashen.
McUBOOT-kompatible Firmware sollte auf 0x8000 geblitzt werden
Flash Breakout auf Pinetime ...
/flash 0x0 http://tt-392.space/breakout.hex
Demo -Video von Breakout on Pinetime
Handgezogenes Uhrengesicht von handgezeichneten ...
/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
Mehr über handgezeichnetes Uhrengesicht
Um eine modifizierte "Geist geblasen" infinitime Firmware zu blinken, die nie schläft ...
/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
Dies wurde durch Bearbeiten src/DisplayApp/DisplayApp.cpp geändert, um alle Anrufe zu case Messages::GoToSleep:
Rost auf myNewt firmware, die Semihosting -Debug -Nachrichten abgibt ...
/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
Rost auf dem Aufstand zu blinken ...
/flash 0x0 https://github.com/lupyuen/pinetime-rust-riot/releases/download/v1.0.3/PineTime.bin
Zum Flash McUBoot Bootloader 5.0.4 ...
/flash 0x0 https://github.com/lupyuen/pinetime-rust-mynewt/releases/download/v5.0.4/mynewt.elf.bin
Manchmal wird Pinetime aufgrund von Firmware -Fehlern verschlossen. Das Blocken des oben genannten McUBoot Booloader sollte die Verriegelung reparieren.
So erstellen Sie Ihre eigene Firmware in einem Webbrowser (ohne IDE oder Toolchain) die Artikel anzeigen ...
Erstellen Sie Pinetime -Firmware in der Cloud mit GitHub -Aktionen
Vorschau Pinetime Watch -Gesichter in Ihrem Webbrowser mit WebAssembly
Wie das Blinken im Telegramm aussieht ...
Sehen Sie sich das Demo -Video auf YouTube an
Haben Sie Fragen zu Pinetime? Chat mit der Pinetime Community über Matrix / Discord / Telegram / IRC ...
https://wiki.pine64.org/index.php/pinetime#community
Schauen Sie sich meine Pinetime -Artikel an
Weil es schwierig und teuer ist, während der Pandemie echte Hardware auf der ganzen Welt zu versenden ... und Remote -Firmware -Tests könnten die Lösung sein.
Remote Pinetime wurde erstellt, damit die Leute mit SmartWatch -Codierung lernen und experimentieren können, ohne eine echte Smartwatch zu haben.
Schauen Sie sich meine Videopräsentation an ...
RIOT Summit 2020 - Sicherere und einfachere eingebettete Programme mit Rost auf Riot
ARM Semihosting ermöglicht es unserer Firmware, Debugging-Nachrichten zu emittieren, indem die ARM-Cortex-M-Anweisung bkpt aufgerufen wird.
Schauen Sie sich diese Implementierung von Arm Semihosting von 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 ;
} Wir nennen __semihost() wie SO: 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 ;
}Wenn wir anrufen ...
/// Write "hellon" (6 characters) to the debugger's stderr output.
#define SEMIHOST_HANDLE 2
semihost_write ( SEMIHOST_HANDLE , ( const unsigned char * ) "hellon" , 6 ); Wir werden sehen, hello die Nachricht in OpenOCD und das Remote Pinetime -Protokoll angezeigt wird. (Nachrichten müssen mit einer neuen Zeile enden oder sie werden nicht angezeigt)
Arm Semihosting muss in OpenOCD aktiviert werden. Hier ist, wie die Remote-Pinetime Arm Semihosting ermöglicht: 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
}
ARM Semihosting kann langsam sein ... Der gesamte Mikrocontroller friert ein, während die Debug -Nachricht über den SWD -Anschluss von Charakter an OpenOCD übertragen wird.
Wir empfehlen, ein statisches Array zu verwenden, um die ausgehenden Nachrichten im Speicher zu puffern.
In der pinetime-rust-mynewt Implementierung von Arm Semihosting verwenden wir MyNewt MBUFs, um die Nachrichten effizient zu puffern.
Verwenden Sie keine ARM -Semihosting, wenn die Bluetooth -LE -Verarbeitung abgelaufen ist. Nachrichten werden fallen gelassen und Bluetooth -LE -Clients werden automatisch die Verbindung trennen.
ARM Semihosting sollte in der Produktionsfirmware deaktiviert werden. Außerdem kann Arm Semihosting hängen, wenn ein JLink -Debugger verbunden ist. Für pinetime-rust-mynewt deaktivieren wir den ARM-Semihosting mit dem GCC-Flagge -DDISABLE_SEMIHOSTING in targets/nrf52_boot/pkg.yml (für den McUBoot-Bootloader) und in targets/nrf52_my_sensor/pkg.yml (für die Application Firmware).
Um Ihren eigenen Telegrammbot zu erstellen ...
Chatten Sie mit Botfather, erstellen Sie einen Bot namens PineTime Bot
Geben Sie /mybots ein, wählen Sie PineTime Bot
Wählen Sie Edit Commands , flash - flash 0x0 https://.../firmware.bin
Um Ihren eigenen Telegrammbot auszuführen: Klonen Sie dieses Repo und führen Sie diese in einem Shell -Skript aus ...
# 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
doneDer Telegramm -Bot ruft Pinetime Updater und XPack OpenOCD auf, um die Firmware über SWD zu Flash -Firmware zu erzielen.
Um XPack OpenOCD (für MAC) oder pinetime-updater/run.sh SPI (für Raspberry Pi) herunterzuladen
Der Telegramm -Bot läuft derzeit auf Raspberry Pi mit XPack OpenOCD (anstelle von OpenOCD SPI). Xpack OpenOCD für 32-Bit-Raspbian wurde von hier heruntergeladen
Der USB-Treiber für ST-Link wurde auf Raspbian so konfiguriert.
# 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-rulesUm Ihre Himbeer -PI -Kamera auf YouTube zu live zu streamen: Führen Sie diese in einem Shell -Skript aus ...
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
doneBasierend auf https://www.makeseof.com/tag/live-stream-youtube-raspberry-pi/
Verwenden Sie eine kabelgebundene Netzwerkverbindung anstelle von WLAN ... da das Einschalten Ihres Mikrowellenofens das 2,4 -GHz -WLAN -Netzwerk stört und Ihren YouTube -Live -Stream beendet. (Und Ihre YouTube -Live -Stream -URL wird sich ändern)
Hier ist das Live-Streaming-Setup mit (links nach rechts) Raspberry Pi 4, Raspberry Pi V2-Kameramodul (8 MP), zwei Lupen, Pinetime mit Pogo-Stiften (scharfe Spitze) und ST-Link V2 ...
Decken Sie mit einem Pappartier-Mâché-Gehäuse ab, um die Reflexion auf der Lupe zu blockieren (wie ein Teleskop) ...
Wie man das papier-mâché-Gehäuse macht ...
Positionieren Sie den Raspberry Pi, das Kameramodul, die zwei Lupen und die Pinetime
Bauen Sie ein Gerüst auf, indem Sie einen Umschlag auf dem Raspberry PI, Kameramodul und Vergrößerungsbrille ruhen
Vervollständigen Sie das Gerüst, indem Sie ein gefaltetes Stück A4-Papier legen
Passen Sie das Papierhandtuch auf dem Gerüst ein und bedecken Sie Raspbery Pi. Ich habe die Paste erstellt, indem ich halbmehl mit einer halben Tasse Wasser gemischt habe.
Lassen Sie das Papier-Mâché über Nacht trocknen, um die Form des Gehäuses zu bilden. Schneiden Sie das Papier-Mâché mit einer Schere. Mikrowellen Sie das Pappartier-Mâché, um es zu trocknen.
Fügen Sie eine zweite Schicht Papiertuchstreifen ordentlich ein.
Mikrowelle das Papier-Mâché für eine Minute, lassen Sie es abkühlen. Verwenden Sie umgestürzte Schalen, um die Struktur zu stützen. Wiederholen Sie dies dreimal, bis das Papier-Mâché trocken ist.
Schneiden Sie das Papier-Mâché-Gehäuse mit einer Schere.
Gibt es Sicherheitsprobleme, die der Welt einen Telegrammbot zum Blinken und Testen aufdecken?
Wir mindern die Sicherheitsrisiken so weit wie möglich ...
Unser Telegrammbot ist mit Rust, einer sicheren Systemprogrammiersprache, gebaut.
Schauen Sie sich den Rust -Quellcode bei src/main.rs an
Kein Remotezugriff auf den Host ist zulässig. Der Telegramm -Bot Umfragen nur für /flash -Befehle und führt sie aus.
Temporäre Dateien werden nach Verwendung mit der tempfile -Bibliothek automatisch gelöscht. Daher reduzieren wir die Belichtung von Dateien mit Malware.
Aber es gibt eine Sorge ... unsere Pinetime kann mit Malware geblitzt werden, die andere Bluetooth -Geräte in der Nähe angreift.
Aus Gründen der IoT -Ausbildung ... werde ich es zulassen! :-)
Ich bin mir der Risiken bewusst, wenn ich diesen kostenlosen Service betreibe. Und wenn Sie Ihre eigene Remote -Pinetime bedienen, sollten Sie sich auch der Risiken bewusst sein.
Es gibt ein ernstes Sicherheitsproblem in Bezug auf halbhosting Unterstützung: Die halbhosting -API unterstützt das Lesen, Schreiben und Ausführen von Dateien auf dem OpenOCD -Host (Raspberry PI).
Dieses Sicherheitsproblem wurde nicht gelöst. Die Problemumgehung besteht darin, halbhosting Unterstützung in OpenOCD zu deaktivieren, was auch Debugging -Nachrichten deaktivieren würde.
Schreiben Sie Semihosting -Debug -Protokoll in einen separaten Telegrammkanal
Drosseln Sie die Anzahl der Semihosting -Nachrichten, die am Telegrammkanal protokolliert werden (Aggregate und überträgt die Nachrichten alle 5 Sekunden als einzelne Telegrammanforderung).
Ermöglichen Sie Semihosting -Debug -Protokoll und Firmware, die koexistieren (beide verwenden OpenOCD)