ESP8266→ATMega32U4→HID→PC



ESPからソフトウェアシリアルで、文字列を送信

文字列を受けっとったATMega32U4は、HIDのキーボードとして、受け取った文字列をPCにキーボード入力するテスト

目的は、最終的には、Androidタブレットが起点として画面のボタンを押すと、ESPにWifiで文字列が飛んで、その文字列が自動でキー入力されるというものをつくりたいので。

過去には、Attiny85を使って

https://funasover.blogspot.com/2024/06/attiny85-4key-keyboard_23.html

押したボタンで自動にパスワードやメールアドレスが入力できるミニキーボードを作っていたがそれをAndroidのボタンタップを起点として実現したい。

ESPは3.3Vで手元にあったATMega32U4(Pro micro)は5Vのため、シリアルのラインにはレベルコンバータを使っている。自作という訳ではなくて、昔購入していたものを使っている。

同じものだと

https://www.amazon.co.jp/gp/product/B081RH1P4L/ref=ox_sc_act_title_1?smid=A3IR3W7NI10CEW&psc=1

とか。

ソフトシリアル通信は、WEBで調べればサクッとできるが、メモを残しておきたい。

ESP8266は、Arduinoのソフトシリアルがそのまま動くので、特にESPだからという配慮はいらない。ピンの配置ぐらい。

#include <SoftwareSerial.h>
SoftwareSerial mySerial(12, 13);  // RX,TX=12,13
void setup() {
  // put your setup code here, to run once:
 mySerial.begin(9600);        // ソフトウェアシリアル通信の開始(ボーレート9600bps)
  pinMode(16, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
mySerial.println("sending1");     // counterの数値を送信する
digitalWrite(16, HIGH);
delay(2000);

}

Arduino側は

#include <SoftwareSerial.h>
#include "Keyboard.h"
 SoftwareSerial mySerial(8, 9);    // RX,TX=8,9

 String recive_massage;
 
 void setup(){
 
   Serial.begin(9600);
   mySerial.begin(9600);
   Keyboard.begin();
}
 
 void loop(){
     if (mySerial.available() > 0) {
    // read the incoming byte:
    recive_massage = mySerial.readStringUntil('\n');
    // say what you got:
    //Serial.print("I received: ");
    //Serial.println(recive_massage);
    Keyboard.print(recive_massage);
     }
}

最初は、Keyboardの所をコメントアウトしておいて、ソフトシリアルで通信できるかを物理的なシリアルに出力して確認してから、その後、Keyboardに。

物理シリアルと、キーボード出力は共存できるので、別にコメントアウトしなくてもOk


semdingの山を確認することができる。


コメント

このブログの人気の投稿

Attiny85とAQM0802A(LCD)のI2C接続

ILI9341 240X320 Arduino