BLE 키보드 제작, 아이패드 제어
아이패드↓를 제어합니다.
관련 보도
블 마우스도 제작했습니다.
😟딱한 사정
나는 아이패드로 전자책을 자주 보지만 가지고 있으면 매우 피곤하다.
또한 페이지를 넘기는 데는 교환 조작이 필요해서 매우 번거롭다.
나는 가벼운 자세로 페이지를 넘길 수 있을지 고민했다.
💡해본 일
규격 탐구
주로 전자 서적의 페이지를 넘기기 때문에 페이지를 축소하기 위해서는 화살표가 필요하다.
또한 Kindle을 시작할 수도 있습니다.
아래와 같다.
디바이스
액션
아이패드 측으로 보내기
🕹X축
← 조작
키보드 Arrow Left
🕹X축
- 작업
키보드 Arrow Right
🕹Y축
↑ 조작
키보드 Arrow Up
🕹Y축
↓ 작업
키보드 Arrow Down
🕹스위치 1
누르다
Kindle 응용 프로그램 시작
스위치
누르다
메인 화면
스위치
누르다
키보드 Arrow Left
스위치
누르다
키보드 Arrow Right
🔧부품 일람
기자재 명칭
시험을 준비하다
ESP32 평가판
ESP32-WROVER 개발판/ESP32-WROOM 개발판 모두 가능
🕹바둑판
조이스틱 및 스위치 세트 - 아마존에서 구입
리듬 스위치
3개 사용
!
보드에 구축할 수도 있습니다.
이번에는 한 손으로 조작할 수 있도록 3D 프린터로 케이스를 만들었다.
연결 다이어그램
MPU 측면에서 잡아당기기 설정이 되어 있어 저항이 필요 없습니다.
💻컨디션
VScode-PlaatformIO를 사용합니다.
PlaatformaIO의 환경 구축은 ↓에 요약되어 있다.
라이브러리 - ESP32 BLE Keyboard
다음 라이브러리를 사용하여 ESP32를 BLE 키보드로 설정합니다.
설치 단계는 다음과 같습니다.
platformio.ini에 다음 내용 추가
lib_deps = t-vk/ESP32 BLE Keyboard@^0.3.2
이렇게 하면 안에 포함할 수 있다.#include <BleKeyboard.h>
📝절차.
아래 내용을 기재하다.
케이스 제작
3D 프린터로 케이스를 제작했습니다.
엄지손가락으로🕹제어할 수 있도록 위에 놓여 있습니다.
스위치는 측면에 배치됩니다.
!
스위치의 3D 데이터 제작에는 Solidpythhon이 사용됩니다.
↓ 참조
소프트웨어 설계/코드
처음에는 한 항목의 임무에 썼는데, 나중에는 계속 확장하고 싶어서 다중 임무로 다시 한 번 썼다.
FreeRTOS를 사용하고 있습니다.
임무 구성
작업 이름
과업
스위치 모니터 타이머
스위치 DOWN/UP의 변경 사항 모니터링
조종봉 감시 타이머
조종대의 변화를 감시하다
메시지 관리 작업
키보드 관리에 스위치/핸들 이벤트 알림
키보드 관리 작업
메시지 관리 이벤트를 보내는 Ble 키보드 제어
코드 관련
코드 자체가github에 업로드되었습니다.
요점을 기재하다.
ble 키보드 라이브러리
초기화는 다음과 같습니다.
#include <BleKeyboard.h>
static BleKeyboard s_xBleKbd;
s_xBleKbd.begin();
begin 이후 짝을 지을 수 있는 상태가 됩니다.아이패드에서 쌍을 지정할 수 있습니다.
연결 여부는 다음과 같이 판단할 수 있다.
if (s_xBleKbd.isConnected())
{
// !!!接続中!!!
}
키보드를 보낼 때는 다음과 같습니다.// 矢印←を送信
s_xBleKbd.write(KEY_LEFT_ARROW);
// Commandキー(Windowsキー)を押しながら、"h"を送信
s_xBleKbd.press(KEY_LEFT_GUI);
delay(10);
s_xBleKbd.print("h");
delay(10);
s_xBleKbd.release(KEY_LEFT_GUI);
delay(50);
Kindle의 시작은 다음과 같습니다.아이패드에 너무 빨리 보내면 무시됩니다.
실기 동작을 보면서 delay 함수를 넣는다.
KbdTask.cpp
/**
* @brief kindle appの起動
*/
static void vProcSw_StartKindle(void)
{
// ->home (Cmd + h)
s_xBleKbd.press(KEY_LEFT_GUI);
delay(10);
s_xBleKbd.print("h"); //文字を送信
delay(10);
s_xBleKbd.release(KEY_LEFT_GUI);
delay(50);
// ->command (Cmd + Space)
s_xBleKbd.press(KEY_LEFT_GUI);
delay(50);
s_xBleKbd.print(" "); // space
delay(50);
s_xBleKbd.release(KEY_LEFT_GUI);
delay(50);
// Erase the string with backspace
for (int i = 0; i < 10; i++)
{
s_xBleKbd.write(KEY_BACKSPACE);
delay(50);
}
// input - "kindle"
delay(500);
s_xBleKbd.print("kindle");
delay(50);
// input - "enter"
s_xBleKbd.write(KEY_RETURN);
delay(50);
return;
}
감시 조종봉(/감시 스위치)
감시 조종대를 예로 들어 설명하다.
25밀리초마다 호출된 타이머를 사용했다.
xTimerCreate()/xTimerReset()은 FreeRTOS-AAPI입니다.
ApiJs.cpp
#define JS_CHECK_TIME (25) // JoyStickチェック間隔:25msec
...
static TimerHandle_t s_xTimerJs = NULL;
...
ErType_t xInitJs(void)
{
...
// text name, timer period, auto-reload, number of times, callback
s_xTimerJs = xTimerCreate(cName, JS_CHECK_TIME, pdTRUE, (void *)0, vTimerCallbackJs);
if (NULL == s_xTimerJs)
{
Serial.printf("%s : error - xTimerCreate\n", __func__);
return ER_FAIL;
}
if (pdTRUE != xTimerReset(s_xTimerJs, JS_CHECK_TIME))
{
Serial.printf("%s : error - xTimerReset\n", __func__);
return ER_FAIL;
}
다음 함수는 25밀리초마다 호출됩니다.ApiJs.cpp
static void vTimerCallbackJs( TimerHandle_t xTimer)
{
int32_t x = analogRead(JS_ASGN_AXIS_X);
int32_t y = analogRead(JS_ASGN_AXIS_Y);
...
x, y는 0-4095의 값으로 얻는다.이번 연결에서 아래 수치를 얻을 수 있습니다.
조종봉 상태
x값
y값
Idle
근처
근처
왼쪽 [←]
근처
근처
오른쪽 [→]
근처
근처
위 [↑]
근처
근처
내리다
근처
근처
!
스위치 감시 타이머도 똑같이 만들어서 안 좋아해요.
오래된 기사지만 ↓에는 자세한 내용이 기재돼 있다.
전체 코드
최후
오랜만에 생활모를 만들 수 있어서 너무 좋아요.
데이터 백업 없이 RTOS 디버깅은 상당히 힘들었습니다.
같은 방법으로 블레 마우스를 제작했기 때문에 추후 소개해 주시기 바랍니다.
참조 링크
Reference
이 문제에 관하여(BLE 키보드 제작, 아이패드 제어), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kotaproj/articles/esp32_keyborad텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)