Pinetime remoto ya no está en funcionamiento. ¡Gracias a todos por probar Pinetime remoto!
El remoto Pinetime es un reloj inteligente Pinetime en Singapur que está configurado para permitir que cualquier persona en el mundo flashe y pruebe el firmware de forma remota.
El bot Bot remoto (creado en óxido) observa un grupo de telegrama para los comandos intermitentes y muestra el firmware a Pinetime.
La pantalla en Pinetime se transmite en vivo a YouTube, por lo que puede ver su firmware en vivo en mi Pinetime.
Para flashear su propio firmware y probar Pinetime, únase al grupo de telegrama "remoto Pinetime": https://t.me/remotepinetime
El registro de flashing (de OpenOCD) y el registro de mensajes de depuración (desde el semihosting del brazo) se mostrará en el canal de telegrama "Remote Pinetime Log" aquí: https://t.me/remotepinetimelog
Mira el video de demostración en YouTube
Para flashear un archivo binario de firmware https://.../firmware.bin a Pinetime en la dirección 0x0 ...
/flash 0x0 https://.../firmware.bin
Esto funciona para cualquier URL que no esté protegida por inicio de sesión.
No pase las URL para los artefactos creados por las acciones de GitHub. Requieren inicio de sesión y el bot de telegrama será bloqueado.
En su lugar, copie los artefactos y cárguelos en "versiones", que no está protegida por el inicio de sesión.
Algunos sabores del firmware de Pinetime requieren un gestor de arranque, como Mcuboot o Softdevice. Flash el gestor de arranque para abordar 0x0 primero, luego flashear el firmware.
El firmware compatible con Mcuboot debe parpadear para la dirección 0x8000
Para flashear en Pinetime ...
/flash 0x0 http://tt-392.space/breakout.hex
Video de demostración de Breakout en Pinetime
Para flashear la cara de reloj dibujado a mano ...
/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
Más sobre la cara de reloj dibujada a mano
Para flashear un firmware infinito modificado de "mentalidad" que nunca duerme ...
/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
Esto se modificó editando src/DisplayApp/DisplayApp.cpp para eliminar todas las llamadas a case Messages::GoToSleep:
Para flashear óxido en el firmware myNewt que emite mensajes de depuración semihostantes ...
/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
Para parpadear óxido en Riot ...
/flash 0x0 https://github.com/lupyuen/pinetime-rust-riot/releases/download/v1.0.3/PineTime.bin
Para flashear Mcuboot Bootloader 5.0.4 ...
/flash 0x0 https://github.com/lupyuen/pinetime-rust-mynewt/releases/download/v5.0.4/mynewt.elf.bin
A veces, Pinetime se bloqueará debido a los errores de firmware. Parpadear el mcuboot booloader anterior debe arreglar el bloqueo.
Para construir su propio firmware en un navegador web (sin instalar ningún IDE o cadena de herramientas), consulte los artículos ...
Construir firmware Pinetime en la nube con acciones de GitHub
Vista previa de Pinetime Mira caras en su navegador web con WebAssembly
Cómo se ve el parpadeo en Telegram ...
Mira el video de demostración en YouTube
¿Tienes preguntas en Pinetime? Chatear con la comunidad de Pinetime en Matrix / Discord / Telegram / IRC ...
https://wiki.pine64.org/index.php/pinetime#community
Mira mis artículos de Pinetime
Debido a que es difícil y costoso enviar hardware real en todo el mundo durante la pandemia ... y las pruebas de firmware remotas podrían ser la solución.
Pinetime remoto se creó para permitir que las personas aprendan y experimenten con la codificación de relojes inteligentes sin tener un reloj inteligente real.
Mira mi presentación de video ...
Riot Summit 2020 - Programas integrados más seguros y simples con óxido en Riot
El semihosting del brazo permite que nuestro firmware emita mensajes de depuración invocando la instrucción BRAM Cortex-M bkpt .
Echa un vistazo a esta implementación de Semihosting de ARM 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 ;
} Llamamos __semihost() así: 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 ;
}Cuando llamamos ...
/// Write "hellon" (6 characters) to the debugger's stderr output.
#define SEMIHOST_HANDLE 2
semihost_write ( SEMIHOST_HANDLE , ( const unsigned char * ) "hellon" , 6 ); Veremos el mensaje hello aparece en OpenOCD y en el registro remoto de Pinetime. (Los mensajes deben terminar con una nueva línea o no aparecerán)
El semihostado del brazo debe habilitarse en OpenOCD. Así es como el remoto Pinetime permite semihosting del brazo: 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
}
El semihosting del brazo puede ser lento ... todo el microcontrolador se congela mientras el mensaje de depuración se transmite carácter por carácter a OpenOcd a través del puerto SWD.
Recomendamos usar una matriz estática para amortiguar los mensajes salientes en la memoria.
En la implementación de pinetime-rust-mynewt de Semihosting de ARM, usamos MyNewt MBUFS para amortiguar los mensajes de manera eficiente.
No use Semihosting de ARM cuando el procesamiento de Bluetooth LE esté en curso ... Los mensajes se eliminarán y los clientes Bluetooth LE se desconectarán automáticamente.
El semihostado del brazo debe deshabilitarse en el firmware de producción. Además, el semihosting de ARM puede colgar cuando un depurador Jlink está conectado. Para pinetime-rust-mynewt deshabilitamos el semihosting del brazo con la bandera GCC -DDISABLE_SEMIHOSTING en targets/nrf52_boot/pkg.yml (para el cargador de arranque Mcuboot) y en targets/nrf52_my_sensor/pkg.yml (para el firmware de aplicaciones).
Para crear tu propio bot de telegrama ...
Chatear con Botfather, crear un bot llamado PineTime Bot
Ingrese /mybots , seleccione PineTime Bot
Seleccione Edit Commands , ingrese flash - flash 0x0 https://.../firmware.bin
Para ejecutar su propio Bot de telegrama: Clone este repositorio y ejecute esto en un script de 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 llama a Pinetime Updater y Xpack OpenOCD para flashear firmware a Pinetime a través de SWD.
Para descargar XPack OpenOcd (para Mac) o OpenOCD SPI (para Raspberry Pi), mire pinetime-updater/run.sh
El Bot Telegram se ejecuta actualmente en Raspberry Pi con XPack OpenOCD (en lugar de OpenOCD SPI). Xpack OpenOcd para Raspbian de 32 bits se descargó desde aquí
El controlador USB para ST-Link se configuró en Raspbian como ...
# 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-rulesPara transmitir su cámara Raspberry Pi a YouTube: ejecute esto en un script de 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
doneBasado en https://www.makeuseof.com/tag/live-stream-youtube-raspberry-pi/
Use una conexión de red con cable en lugar de WiFi ... porque encender su horno de microondas interrumpirá la red WiFi de 2.4 GHz y terminará su transmisión en vivo de YouTube. (Y su URL de transmisión en vivo de YouTube cambiará)
Aquí está la configuración de transmisión en vivo con (de izquierda a derecha) Raspberry Pi 4, Raspberry PI V2 Camina de cámara (8 MP), dos lupas, pinetime con pasadores POGO (punta afilada) y ST-Link V2 ...
Cubra con un recinto de papel maché para bloquear la reflexión sobre las lupas (como un telescopio) ...
Cómo hacer el recinto de papel maché ...
Coloque la Raspberry Pi, el módulo de la cámara, dos lupas y el pinarteo
Construya un andamio descansando un sobre en la frambuesa Pi, el módulo de la cámara y las lupas de lupa
Complete el andamio colocando una pieza plegada de papel de tamaño A4
Pegue tiras de toalla de papel en el andamio, asegúrese de cubrir Raspbery Pi. Creé la pasta mezclando media taza de harina con media taza de agua.
Deje que el papel maché se seque durante la noche para formar la forma del recinto. Recorte el papel maché con tijeras. Microonde el papel maché para secarlo.
Pegue una segunda capa de tiras de toallas de papel, de manera ordenada.
Microondas al papel maché por un minuto, déjalo enfriar. Use tazones volcados para soportar la estructura. Repita 3 veces hasta que el papel maché esté seco.
Recorte el recinto de papel maché con tijeras.
¿Hay algún problema de seguridad que exponga un bot de telegrama al mundo para parpadear y probar?
Mitigamos los riesgos de seguridad tanto como sea posible ...
Nuestro Bot Telegram está construido con Rust, un lenguaje de programación de sistemas seguros.
Consulte el código fuente de Rust en src/main.rs
No se permite acceso remoto al host. El Bot de telegrama solo encuesta /flash Commands y los ejecuta.
Los archivos temporales se eliminan automáticamente después de su uso con la biblioteca tempfile . Por lo tanto, reducimos la exposición de los archivos con malware.
Pero hay una preocupación ... Nuestro Pinetime puede parpadear con malware que ataca a otros dispositivos Bluetooth cercanos.
En aras de la educación de IoT ... ¡lo permitiré! :-)
Soy plenamente consciente de los riesgos cuando opero este servicio gratuito. Y si elige operar su propio Pinetime remoto, también debe conocer los riesgos.
Hay un problema de seguridad serio sobre el soporte semihostado: la API de semihosting admite leer, escribir y ejecutar archivos en el host de OpenOCD (Raspberry Pi).
Este problema de seguridad no se ha resuelto. La solución es deshabilitar el soporte de semihosting en OpenOCD, que también deshabilitaría los mensajes de depuración.
Escriba el registro de depuración de semihosting a un canal de telegrama separado
Acelere el número de mensajes semihostantes que se registrarán al canal Telegram (agregados y transmite los mensajes como una sola solicitud de telegrama cada 5 segundos)
Permitir el registro de depuración semihostado y el flasheo de firmware para coexistir (ambos usan OpenOcd)