원격 피네 타임은 더 이상 작동하지 않습니다. 원격 피네 타임을 테스트 해 주신 모든 분들께 감사드립니다!
원격 Pinetime은 싱가포르의 Pinetime Smart Watch로, 전 세계의 모든 사람이 원격으로 펌웨어를 플래시하고 테스트 할 수 있도록 구성됩니다.
원격 Pinetime Bot (Rust에서 생성)은 Telegram Group을 깜박이는 명령을보고 펌웨어를 Pinetime으로 플래시합니다.
Pinetime의 디스플레이는 YouTube로 라이브로 스트리밍되므로 펌웨어가 내 파인 타임에 실행되는 것을 볼 수 있습니다.
자신의 펌웨어를 플래시하고 Pinetime을 테스트하려면 "원격 Pinetime"Telegram Group : https://t.me/remotepinetime에 가입하십시오.
플래시 로그 (OpenOCD에서) 및 디버그 메시지 로그 (ARM Semihosting)는 "원격 Pinetime Log"Telegram 채널에 표시됩니다 : https://t.me/remotepinetimelog
YouTube에서 데모 비디오를보십시오
펌웨어 바이너리 파일을 플래시하려면 https://.../firmware.bin to pinetime에서 주소 0x0 ...
/flash 0x0 https://.../firmware.bin
이것은 로그인되지 않은 모든 URL에 대해 작동합니다.
GitHub 동작으로 생성 된 아티팩트에 대한 URL을 전달하지 마십시오. 로그인이 필요하고 Telegram 봇이 차단됩니다.
대신 아티팩트를 복사하여 로그인으로 보호되지 않는 "릴리스"아래에 업로드하십시오.
Pinetime 펌웨어의 일부 맛에는 McUboot 또는 SoftDevice와 같은 부트 로더가 필요합니다. 부트 로더를 플래시하여 0x0 먼저 주소 다음 펌웨어를 플래시하십시오.
MCUBOOT 호환 펌웨어는 0x8000 주소하기 위해 플래시해야합니다
Pinetime에 플래시 브레이크 아웃 ...
/flash 0x0 http://tt-392.space/breakout.hex
피네 타임에 브레이크 아웃의 데모 비디오
손으로 그린 시계 얼굴을 플래시하려면 ...
/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
손으로 그린 시계 얼굴에 대한 자세한 내용
수정 된 "Mind Blown"Infinitime 펌웨어를 플래시하려면 결코 잠들지 않습니다 ...
/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
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 또는 툴체인을 설치하지 않고) 기사를 확인하십시오 ...
GitHub 동작으로 클라우드에 Pinetime 펌웨어를 구축하십시오
WebAssembly를 사용하여 웹 브라우저에서 Pinetime Watch Faces 미리보기
전보에서 번쩍이는 방법 ...
YouTube에서 데모 비디오를보십시오
Pinetime에 질문이 있습니까? Matrix / Discord / Telegram / IRC에서 Pinetime 커뮤니티와 채팅하십시오.
https://wiki.pine64.org/index.php/pinetime#community
내 Pinetime 기사를 확인하십시오
전 세계적으로 실제 하드웨어를 배송하는 것은 어렵고 비용이 많이 들기 때문에, 원격 펌웨어 테스트가 솔루션이 될 수 있습니다.
사람들이 실제 스마트 워치없이 스마트 워치 코딩을 배우고 실험 할 수 있도록 원격 피네 타임이 만들어졌습니다.
내 비디오 프레젠테이션을 확인하십시오 ...
Riot Summit 2020- 폭동에 녹을 곁들인 더 안전하고 단순한 임베디드 프로그램
ARM Semihosting을 사용하면 펌웨어가 ARM Cortex-M 명령 bkpt 호출하여 디버깅 메시지를 방출 할 수 있습니다.
pinetime-rust-mynewt 에서이 ARM의 구현을 확인하십시오 ...
/// 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() 처럼 다음과 같이 부릅니다 : 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 Log에 표시되는 메시지를 볼 수 있습니다. (메시지는 Newline으로 끝나야합니다. 그렇지 않으면 나타나지 않습니다)
OpenOCD에서 ARM SemiHosting을 활성화해야합니다. 원격 Pinetime이 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
}
ARM Semihosting은 느리게 될 수 있습니다 ... 전체 마이크로 컨트롤러가 얼어 붙는 동안 디버그 메시지는 SWD 포트를 통해 OpenOCD로 문자별로 문자를 전송합니다.
정적 배열을 사용하여 나가는 메시지를 메모리에 버퍼링하는 것이 좋습니다.
ARM Semihosting의 pinetime-rust-mynewt 구현에서 MyNewt MBUFS를 사용하여 메시지를 효율적으로 버퍼링합니다.
Bluetooth LE 처리가 진행 중일 때 ARM 반미를 사용하지 마십시오 ... 메시지가 삭제되고 Bluetooth LE 클라이언트가 자동으로 분리됩니다.
생산 펌웨어에서 ARM 반미 절약을 비활성화해야합니다. 또한 Jlink 디버거가 연결되면 ARM 반미 링이 매달릴 수 있습니다. pinetime-rust-mynewt 의 경우 GCC 플래그 -DDISABLE_SEMIHOSTING 과 함께 ARM을 비활성화합니다 targets/nrf52_boot/pkg.yml (McUBOOT BootLoader의 경우) 및 targets/nrf52_my_sensor/pkg.yml (응용 프로그램 회사의 경우).
나만의 Telegram Bot을 만들려면 ...
Botfather와 채팅하고 PineTime Bot 이라는 봇을 만듭니다
/mybots 입력하고 PineTime Bot 선택하십시오
Edit Commands 선택, flash - flash 0x0 https://.../firmware.bin
자신의 Telegram Bot을 실행하려면 :이 저장소를 복제하고 쉘 스크립트로 실행하십시오 ...
# 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은 Pinetime Updater 및 Xpack OpenOCD를 SWD를 통해 Pinetime으로 플래시 펌웨어로 호출합니다.
Xpack OpenOCD (Mac 용) 또는 OpenOCD SPI (Raspberry Pi 용)를 다운로드하려면 pinetime-updater/run.sh 를보십시오.
Telegram Bot은 현재 OpenOCD SPI 대신 Xpack OpenOCD와 함께 Raspberry Pi에서 실행 중입니다. 32 비트 Raspbian 용 Xpack OpenOCD가 여기에서 다운로드되었습니다
ST-Link의 USB 드라이버는 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-rulesRaspberry 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
donehttps://www.makeuseof.com/tag/live-stream-youtube-raspberry-pi/ 기반
Wi -Fi 대신 유선 네트워크 연결을 사용하십시오 ... 마이크로파 오븐을 켜면 2.4GHz WiFi 네트워크가 방해되고 YouTube 라이브 스트림이 종료되므로. (및 YouTube 라이브 스트림 URL이 변경됩니다)
다음은 (왼쪽에서 오른쪽) Raspberry Pi 4, Raspberry Pi V2 카메라 모듈 (8 MP), 2 개의 돋보기 안경, Pogo Pins (Sharp Tip) 및 ST-Link V2가있는 라이브 스트리밍 설정입니다.
돋보기 (망원경과 같은)의 반사를 차단하기 위해 파이피아 마케 인클로저로 덮으십시오 ...
Papier-Mâché 인클로저를 만드는 방법 ...
라즈베리 파이, 카메라 모듈, 2 개의 돋보기 및 피네 타임 위치
Raspberry Pi, 카메라 모듈 및 돋보기에 봉투를 쉬게하여 발판을 만듭니다.
접힌 A4 크기의 종이를 놓아 발판을 완성하십시오.
비계에 종이 타월을 붙여 넣으십시오. Raspbery Pi를 덮으십시오. 나는 밀가루 반 컵을 반 컵의 물과 혼합하여 페이스트를 만들었습니다.
Papier-Mâché가 밤새 건조시켜 인클로저의 모양을 형성하십시오. 가위로 Papier-Mâché를 다듬습니다. Papier-Mâché를 전자 레인지로 건조시킵니다.
종이 타월 스트립의 두 번째 층을 순서대로 붙여 넣습니다.
1 분 동안 Papier-Mâché를 전자 레인지에 식히십시오. 전복 된 그릇을 사용하여 구조를지지하십시오. Papier-Mâché가 건조해질 때까지 3 번 반복하십시오.
가위로 Papier-Mâché 인클로저를 다듬습니다.
깜박임 및 테스트를 위해 전 세계에 전 세계에 노출되는 보안 문제가 있습니까?
우리는 가능한 한 많은 보안 위험을 완화합니다 ...
Telegram Bot은 안전한 시스템 프로그래밍 언어 인 Rust로 제작되었습니다.
src/main.rs 에서 Rust 소스 코드를 확인하십시오
호스트에 대한 원격 액세스가 허용되지 않습니다. Telegram Bot은 /flash 명령에 대해서만 설문 조사하고 실행합니다.
임시 파일은 tempfile 라이브러리와 함께 사용한 후 자동으로 삭제됩니다. 따라서 맬웨어로 파일의 노출을 줄입니다.
그러나 한 가지 우려 사항이 있습니다 ... 우리의 파인 타임은 근처의 다른 Bluetooth 장치를 공격하는 맬웨어로 플래시 될 수 있습니다.
IoT 교육을 위해 ... 나는 그것을 허용 할 것이다! :-)
이 무료 서비스를 운영 할 때의 위험을 완전히 알고 있습니다. 그리고 자신만의 원격 파인 타임을 운영하기로 선택한 경우 위험을 알고 있어야합니다.
반 해제 지원에 관한 한 가지 심각한 보안 문제가 있습니다. 반 해체 API는 OpenOCD 호스트 (Raspberry Pi)에서 파일을 읽고, 쓰고, 실행하는지 지원합니다.
이 보안 문제는 해결되지 않았습니다. 해결 방법은 OpenOCD에서 반항적 인 지원을 비활성화하는 것이며, 이는 디버깅 메시지를 비활성화하는 것입니다.
반시기 디버그 로그를 별도의 텔레 그램 채널에 쓰십시오
Telegram 채널에 로그온하는 반시중인 메시지 수를 스로틀 (5 초마다 단일 텔레 그램 요청으로 전송하고 메시지를 전송합니다).
반기 디버그 로그 및 펌웨어 플래시가 공존하기 위해 깜박임을 허용합니다 (둘 다 OpenOCD를 사용합니다).