Remote pinetime tidak lagi beroperasi. Terima kasih semuanya untuk menguji pinetime jarak jauh!
Remote Pinetime adalah jam tangan pintar pinetime di Singapura yang dikonfigurasi untuk memungkinkan siapa pun di dunia untuk mem -flash dan menguji firmware dari jarak jauh.
Remote Pinetime Bot (dibuat di Rust) menonton grup telegram untuk perintah berkedip dan mem -flash firmware ke pinetime.
Layar di pinetime dialirkan langsung ke YouTube, sehingga Anda dapat menonton firmware Anda berjalan langsung di pinetime saya.
Untuk mem -flash firmware Anda sendiri dan uji pinetime, bergabunglah dengan grup telegram "Remote Pinetime": https://t.me/remotepinetime
Log berkedip (dari OpenOCD) dan Debug Message Log (dari ARM Semihosting) akan ditampilkan di saluran telegram "Remote Pinetime Log" di sini: https://t.me/remotepinetimelog
Tonton video demo di YouTube
Untuk mem -flash file biner firmware https://.../firmware.bin ke pinetime di alamat 0x0 ...
/flash 0x0 https://.../firmware.bin
Ini berfungsi untuk URL apa pun yang tidak dilindungi login.
Jangan lulus URL untuk artefak yang dibuat oleh aksi GitHub. Mereka membutuhkan login dan bot telegram akan diblokir.
Sebaliknya, salin artefak dan unggah di bawah "rilis", yang tidak dilindungi oleh login.
Beberapa rasa firmware pinetime memerlukan bootloader, seperti Mcuboot atau SoftDevice. Flash bootloader untuk membahas 0x0 terlebih dahulu, lalu kembalikan firmware.
Firmware yang kompatibel dengan McUboot harus diseberangi untuk mengatasi 0x8000
Untuk flash breakout di pinetime ...
/flash 0x0 http://tt-392.space/breakout.hex
Demo Video Breakout di Pinetime
Untuk menyalakan wajah arloji tangan ...
/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
Lebih lanjut tentang wajah arloji yang ditarik tangan
Untuk mem -flash firmware infinitime "mind blown" yang dimodifikasi yang tidak pernah tidur ...
/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
Ini dimodifikasi dengan mengedit src/DisplayApp/DisplayApp.cpp untuk menghapus semua panggilan ke case Messages::GoToSleep:
Untuk mem -flash karat di firmware mynewt yang memancarkan pesan debug semihosting ...
/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
Untuk mem -flash karat di kerusuhan ...
/flash 0x0 https://github.com/lupyuen/pinetime-rust-riot/releases/download/v1.0.3/PineTime.bin
Untuk mem -flash mcuboot bootloader 5.0.4 ...
/flash 0x0 https://github.com/lupyuen/pinetime-rust-mynewt/releases/download/v5.0.4/mynewt.elf.bin
Terkadang pinetime akan dikurung karena kesalahan firmware. Mengedipkan mcuboot booloader di atas harus memperbaiki penguncian.
Untuk membangun firmware Anda sendiri di browser web (tanpa menginstal IDE atau toolchain apa pun) lihat artikelnya ...
Bangun firmware pinetime di cloud dengan tindakan github
Pratinjau Pinetime Watch Wajah di browser web Anda dengan WebAssembly
Bagaimana kelihatannya berkedip di telegram ...
Tonton video demo di YouTube
Punya pertanyaan di Pinetime? Mengobrol dengan komunitas pinetime di matriks / perselisihan / telegram / IRC ...
https://wiki.pine64.org/index.php/pinetime#community
Lihat artikel pinetime saya
Karena sulit dan mahal untuk mengirimkan perangkat keras nyata di seluruh dunia selama pandemi ... dan pengujian firmware jarak jauh bisa menjadi solusi.
Remote Pinetime dibuat untuk memungkinkan orang belajar dan bereksperimen dengan pengkodean jam tangan pintar tanpa memiliki jam tangan pintar yang nyata.
Lihat presentasi video saya ...
Riot Summit 2020 - Program tertanam yang lebih aman & lebih sederhana dengan karat di kerusuhan
ARM SEMIHOSTING memungkinkan firmware kami untuk memancarkan pesan debugging dengan memanggil instruksi Arm Cortex-M bkpt .
Lihat implementasi semihosting ARM dari 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 ;
} Kami menyebut __semihost() So 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 ;
}Saat kita menelepon ...
/// Write "hellon" (6 characters) to the debugger's stderr output.
#define SEMIHOST_HANDLE 2
semihost_write ( SEMIHOST_HANDLE , ( const unsigned char * ) "hellon" , 6 ); Kita akan melihat pesan hello muncul di OpenOCD dan log pinetime jarak jauh. (Pesan harus diakhiri dengan garis baru atau tidak akan muncul)
Lengan semihosting perlu diaktifkan di OpenOCD. Begini cara Remote Pinetime memungkinkan semihosting lengan: 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 bisa lambat ... seluruh mikrokontroler membeku sementara pesan debug ditransmisikan karakter berdasarkan karakter ke OpenOCD melalui port SWD.
Kami merekomendasikan menggunakan array statis untuk buffer pesan keluar dalam memori.
Dalam implementasi pinetime-rust-mynewt dari semihosting ARM, kami menggunakan mbuf mynewt untuk buffer pesan secara efisien.
Jangan gunakan semihosting ARM ketika pemrosesan Bluetooth Le sedang berlangsung ... Pesan akan dijatuhkan dan klien Bluetooth LE akan secara otomatis terputus.
Semihosting ARM harus dinonaktifkan di firmware produksi. Juga, semihosting ARM mungkin menggantung ketika debugger JLink terhubung. Untuk pinetime-rust-mynewt kami menonaktifkan semihosts lengan dengan bendera GCC -DDISABLE_SEMIHOSTING di targets/nrf52_boot/pkg.yml (untuk mcuboot bootloader) dan di targets/nrf52_my_sensor/pkg.yml (untuk aplikasi aplikasi).
Untuk membuat bot telegram Anda sendiri ...
Obrolan dengan BotFather, buat bot bernama PineTime Bot
Masukkan /mybots , pilih PineTime Bot
Pilih Edit Commands , masukkan flash - flash 0x0 https://.../firmware.bin
Untuk menjalankan bot telegram Anda sendiri: Kloning repo ini dan jalankan ini dalam skrip 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
doneTelegram bot memanggil Pinetime Updater dan XPack OpenOCD ke Flash Firmware ke Pinetime melalui SWD.
Untuk mengunduh XPack OpenOCD (untuk Mac) atau OpenOCD SPI (untuk Raspberry Pi), lihat pinetime-updater/run.sh
Bot telegram saat ini berjalan di Raspberry Pi dengan XPack OpenOCD (bukan OpenOCD SPI). XPack OpenOCD untuk raspbian 32-bit diunduh dari sini
Driver USB untuk ST-Link dikonfigurasi pada raspbian seperti ...
# 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-rulesUntuk Live Streaming Raspberry Pi Camera Anda ke YouTube: Jalankan ini dalam skrip 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
doneBerdasarkan https://www.makeuseof.com/tag/live-stream-youtube-raspberry-pi/
Gunakan koneksi jaringan kabel alih -alih wifi ... karena menyalakan oven microwave Anda akan mengganggu jaringan wifi 2,4 GHz dan mengakhiri streaming langsung YouTube Anda. (Dan URL Stream Langsung YouTube Anda akan berubah)
Berikut adalah pengaturan streaming langsung dengan (kiri ke kanan) Raspberry Pi 4, modul kamera Raspberry Pi V2 (8 MP), dua gelas pembesar, pinetime dengan pin pogo (ujung tajam) dan st-link v2 ...
Tutupi dengan kandang papier-mâché untuk memblokir refleksi pada kacamata pembesar (seperti teleskop) ...
Cara membuat kandang papier-mâché ...
Posisikan pi raspberry, modul kamera, dua gelas pembesar dan pinetime
Bangun perancah dengan mengistirahatkan amplop di raspberry pi, modul kamera dan kacamata pembesar
Lengkapi perancah dengan meletakkan selembar kertas ukuran A4
Tempel strip handuk kertas pada perancah, pastikan untuk menutupi raspbery pi. Saya membuat pasta dengan mencampur setengah cangkir tepung dengan setengah cangkir air.
Biarkan papier-mâché mengering semalaman untuk membentuk bentuk selungkup. Potong papier-mâché dengan gunting. Microwave Papier-mâché untuk mengeringkannya.
Tempel lapisan kedua strip handuk kertas, dengan cara yang tertib.
Microwave papier-mâché selama satu menit, biarkan dingin. Gunakan mangkuk yang terbalik untuk mendukung struktur. Ulangi 3 kali sampai papier-mâché kering.
Potong kandang papier-mâché dengan gunting.
Apakah ada masalah keamanan yang mengekspos bot telegram ke dunia untuk mem -flash dan pengujian?
Kami mengurangi risiko keamanan sebanyak mungkin ...
Bot telegram kami dibangun dengan karat, bahasa pemrograman sistem yang aman.
Lihat kode sumber karat di src/main.rs
Tidak ada akses jarak jauh ke host yang diizinkan. Bot telegram hanya jajak pendapat untuk /flash perintah dan menjalankannya.
File sementara secara otomatis dihapus setelah digunakan dengan pustaka tempfile . Jadi kami mengurangi paparan file dengan malware.
Tapi ada satu kekhawatiran ... pinetime kami mungkin dilontarkan dengan malware yang menyerang perangkat Bluetooth lainnya di dekatnya.
Demi pendidikan IoT ... Saya akan mengizinkannya! :-)
Saya sepenuhnya menyadari risiko ketika saya mengoperasikan layanan gratis ini. Dan jika Anda memilih untuk mengoperasikan pinetime jarak jauh Anda sendiri, Anda harus mengetahui risikonya juga.
Ada satu masalah keamanan serius tentang dukungan semihosting: API semihosting mendukung membaca, menulis, dan mengeksekusi file pada host OpenOCD (Raspberry PI).
Masalah keamanan ini belum diselesaikan. Penanganan solusi adalah untuk menonaktifkan dukungan semihosting di OpenOCD, yang juga akan menonaktifkan pesan debugging.
Tulis log debug semihosting ke saluran telegram terpisah
Throttle Jumlah pesan semihosting yang akan dicatat ke saluran telegram (agregat dan mentransmisikan pesan sebagai permintaan telegram tunggal setiap 5 detik)
Izinkan log debug dan firmware flashing untuk hidup berdampingan (mereka berdua menggunakan OpenOCD)