Удаленное Pinetime больше не работает. Спасибо всем за тестирование удаленного Pinetime!
Remote Pinetime - это Smart Watch Pinetime Smart Watch в Сингапуре, которая настроена на то, чтобы позволить любому в мире прошивать и проходить прошивку удаленно.
Удаленный бот Pinetime (созданный в Rust) наблюдает за группой Telegram для мигающих команд и прошивает прошивку в Pinetime.
Дисплей на Pinetime транслируется в прямом эфире на YouTube, так что вы можете посмотреть, как ваша прошивка работает в прямом эфире на моем Pinetime.
Чтобы прошить свою собственную прошивку и тестировать Pinetime, присоединяйтесь к группе «Удаленное pinetime»: https://t.me/remotepinetime
Журнал мигания (от openocd) и журнал сообщений отладки (из полугостирования ARM) будут показаны в канале Telegram «Удаленный журнал pinetime» здесь: https://t.me/remotepineTimeLog
Посмотрите демо -видео на YouTube
Чтобы прошить бинарный файл прошивки https://.../firmware.bin в pinetime на адрес 0x0 ...
/flash 0x0 https://.../firmware.bin
Это работает для любого URL, который не защищен входом в систему.
Не проходите URL -адреса для артефактов, созданных GitHub Actions. Они требуют входа в систему, и бот Telegram будет заблокирован.
Вместо этого скопируйте артефакты и загрузите их в «Выпуски», которые не защищены входом в систему.
Некоторые ароматы прошивки Pinetime требуют загрузчика, такого как Mcuboot или Softdevice. Сначала вспыхивают загрузчик, чтобы обратиться к 0x0 , а затем прошивайте прошивку.
Прошивка, совместимая с 0x8000
Чтобы прорваться на прорыв на Pinetime ...
/flash 0x0 http://tt-392.space/breakout.hex
Демо -видео о прорыве на Pinetime
Чтобы вспыхивать нарисованные вручную часы ...
/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
Подробнее о нарисованном вручную часов
Чтобы пропустить модифицированную прошивку «раздутого разума», которая никогда не спит ...
/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
Это было изменено путем редактирования src/DisplayApp/DisplayApp.cpp case Messages::GoToSleep:
Чтобы пропустить ржавчину на прошивке MyNewt, которая излучает полугостические сообщения отладки ...
/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
Чтобы прорвать ржавчину на бунте ...
/flash 0x0 https://github.com/lupyuen/pinetime-rust-riot/releases/download/v1.0.3/PineTime.bin
Чтобы Flash Mcuboot Bootloader 5.0.4 ...
/flash 0x0 https://github.com/lupyuen/pinetime-rust-mynewt/releases/download/v5.0.4/mynewt.elf.bin
Иногда Pinetime будет заблокирован из -за ошибок прошивки. Прошивая вышеупомянутый Mcuboot Booloader, должен исправить блокировку.
Чтобы создать собственную прошивку в веб -браузере (без установки какой -либо IDE или Toolchain) Посмотрите статьи ...
Создайте прошивку Pinetime в облаке с действиями GitHub
Предварительный просмотр Pinetime Watch Faces в вашем веб -браузере с Webassembly
Как выглядит мигание в Telegram ...
Посмотрите демо -видео на YouTube
Есть вопросы о Pinetime? Общайтесь с сообществом Pinetime на Matrix / Discord / Telegram / IRC ...
https://wiki.pine64.org/index.php/pinetime#community
Проверьте мои статьи Pinetime
Потому что во время пандемии трудно и дорого поставить реальное оборудование по всему миру ... и удаленное тестирование прошивки может быть решением.
Удаленный Pinetime был создан, чтобы позволить людям учиться и экспериментировать с кодированием SmartWatch, не имея настоящих умных часов.
Проверьте мою видео -презентацию ...
Riot Summit 2020 - безопасные и простые встроенные программы с Rust on Riot
ARM Semihosting позволяет нашей прошивки издавать отладку сообщения, вызывая инструкцию Arm Cortex-M bkpt .
Проверьте эту реализацию полугостирования ARM от 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 ;
} Мы называем __semihost() как 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 ;
}Когда мы звоним ...
/// Write "hellon" (6 characters) to the debugger's stderr output.
#define SEMIHOST_HANDLE 2
semihost_write ( SEMIHOST_HANDLE , ( const unsigned char * ) "hellon" , 6 ); Мы увидим сообщение hello появится в OpenOCD и удаленном журнале Pinetime. (Сообщения должны закончиться новой линией, иначе они не появятся)
ARM Semihosting должно быть включено в OpenOCD. Вот как удаленное pinetime включает в себя полугостинг ARM: 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 может быть медленным ... Весь микроконтроллер замораживает, в то время как отладочное сообщение передается символом в OpenOCD через порт SWD.
Мы рекомендуем использовать статический массив для буферизации исходящих сообщений в памяти.
В реализации полугостирования ARM pinetime-rust-mynewt мы используем MyNewt MBUFS для эффективного буфера сообщений.
Не используйте полугостирование ARM, когда обработка Bluetooth LE продолжается ... сообщения будут отброшены, а клиенты Bluetooth LE автоматически отключаются.
Полудостирование ARM должно быть отключено в производственной прошивке. Кроме того, полугостирование ARM может зависеть, когда подключен отладчик JLink. Для pinetime-rust-mynewt мы отключаем полугостирование ARM с помощью флага GCC -DDISABLE_SEMIHOSTING в targets/nrf52_boot/pkg.yml (для загрузчика Mcuboot) и в targets/nrf52_my_sensor/pkg.yml (для применения).
Чтобы создать свой собственный бот телеграммы ...
Общайтесь с Botfather, создайте бот по имени PineTime Bot
Введите /mybots , выберите PineTime Bot
Выберите Edit Commands , введите flash - flash 0x0 https://.../firmware.bin
Чтобы запустить свой собственный бот Telegram: клонировать это репо и запустить это в сценарии оболочки ...
# 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
doneБот Telegram вызывает Pinetime Updater и Xpack OpenOCD, чтобы прошивать прошивку в Pinetime через SWD.
Чтобы загрузить xpack openocd (для mac) или openocd spi (для Raspberry Pi), посмотрите на pinetime-updater/run.sh
Бот Telegram в настоящее время работает на Raspberry Pi с Xpack OpenOCD (вместо OpenOCD SPI). xpack openocd для 32-битной Raspbian был загружен отсюда
Драйвер USB для ST-Link был настроен на Raspbian, как ...
# 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-rulesЧтобы жить по потоковой передаче вашей камеры Raspberry Pi на YouTube: запустите ее в сценарии оболочки ...
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
doneНа основе https://www.makeuseof.com/tag/live-stream-youtube-raspberry-pi//
Используйте проводное сетевое соединение вместо Wi -Fi ... потому что переключение на микроволновой печи нарушит сеть Wi -Fi 2,4 ГГц и завершит прямую трансляцию YouTube. (И ваш URL -адрес на YouTube в прямом эфире изменится)
Вот настройка потоковой передачи с (слева направо) Raspberry Pi 4, модуль камеры Raspberry Pi V2 (8 Мп), два увеличительных очка, PineteMime с Pogo Pins (острый наконечник) и ST-Link V2 ...
Накрыть крышкой папье-маше, чтобы заблокировать отражение на увеличительных очках (как телескоп) ...
Как сделать корпус папье-маше ...
Поместите Raspberry Pi, модуль камеры, два увеличительных очка и pinetime
Построить каркас, положив конверт на Raspberry Pi, модуль камеры и увеличительные очки
Заполните каркас, положив сложенный кусок бумаги размером с A4
Вставьте полоски бумажного полотенца на каркасе, обязательно покрыть малину Pi. Я создал пасту, смешивая половину чашки муки с половиной чашки воды.
Позвольте папье-маше высохнуть в течение ночи, чтобы сформировать форму корпуса. Обрежьте папье-маше ножницами. Микроволновая печь папье-маше высушит его.
Вставьте второй слой полос бумажных полотенец, упорядоченным образом.
Микроволновая печь папье-маше в течение одной минуты, дайте ему остыть. Используйте перевернутые миски, чтобы поддержать структуру. Повторите 3 раза, пока папье-маше не станет сухой.
Обрежьте корпус с ножницами.
Существуют ли какие -либо проблемы безопасности, разоблачающие бот телеграммы для мира для мигания и тестирования?
Мы как можно больше смягчаем риски безопасности ...
Наш бот Telegram построен с Rust, безопасным системным языком программирования.
Проверьте исходный код Rust в src/main.rs
Удаленный доступ к хосту не допускается. Бот Telegram только для команд /flash и выполняет их.
Временные файлы автоматически удаляются после использования с библиотекой tempfile . Таким образом, мы уменьшаем экспозицию файлов с вредоносным ПО.
Но есть одна проблема ... нашу Pinetime может быть вспыхнут вредоносными программами, которая атакует другие устройства Bluetooth поблизости.
Ради образования IoT ... Я позволю! :-)
Я полностью осведомлен о рисках, когда работаю на этом бесплатном обслуживании. И если вы решите управлять собственным удаленным Pinetime, вы должны знать о рисках.
Существует одна серьезная проблема безопасности, касающаяся поддержки полугостирования: API полугостирования поддерживает чтение, написание и выполнение файлов на хосте OpenOCD (Raspberry Pi).
Эта проблема безопасности не была решена. Обходной путь состоит в том, чтобы отключить поддержку полугостирования в OpenOCD, которая также отключила бы отладку сообщения.
Напишите журнал отладки в полугостинге в отдельный канал телеграммы
Дроссель Количество полухостинг -сообщений, которые будут зарегистрированы в канале Telegram (агрегирует и передает сообщения в виде одного запроса телеграммы каждые 5 секунд)
Разрешить журнал отладки в полугостинге и прошивка прошивки, чтобы сосуществовать (они оба используют OpenOCD)