ワープロなんて大層な表題を付けましたが、中身はお笑いネタかも。本人はいたってまじめです。USBキーボードからESP32-S3への文字直接入力ができたので、日本語変換もできないかと考えました。既にやっておられる方がこちらに。
「Lua」「SKK」を使うのだとか、うーん私には難しい。なので、安直な方法(エヘヘ)を考えました。ついでに私の初試みもいくつか。
まずは「Tera Term」において、ローカルエコーなしで文字を送信し、ESP32-S3
からの返信を受けた様子をお見せします。
小学生の夏休みの日記レベルですね(小学生に失礼かな)。
"kinou" SPキー "mo" SPキー "to" SPキー "te" SPキー "mo" SPキー ...
ってな具合に、アルファベット数個を打ちます。SPキーを区切りに、それに対応する文字をfep.hpp
から探し出し、返信しています。PC初期の頃は、こんな風に1文字1文字打ってたんだっけと感慨深いです。もっと前の「日本語タイプライター」も知ってます。ワープロ専用機じゃないですよ。
マイコンボードには一切何も施す必要はないので、本体写真などは割愛します。
環境/構成です。
1.Windows 11 Pro
2.Arduino IDE 2.3.6
3.ESP32S3 Dev Module(FREENOVE ESP32-S3 WROOM 8MB Flash)
4.「Tera Term」を介してシリアル通信(1文字ずつ即、送信してくれるので)
5.最初、UNOで挑戦。メモリ不足になり断念。ESP32-S3に移行。
<string>が使える
`Partition Scheme:"Huge APP ..."` でコンパイル
6.私として初の試み
・構造体とその配列
・ローマ字から、かな漢字に変換するためのファイル「fep.hpp」を作成
別ファイルにしてスケッチと同じフォルダーに配置
fep.hpp
の中身です。(FrontEndProcessor 分かりますか?)
struct ath{
char a[10]; String kk;
};
const ath fep[] ={ // 訓読み名詞形で登録
"0","0","1","1","2","2","3","3","4","4",
"5","5","6","6","7","7","8","8","9","9",
"a","あ","i","い","u","う","e","え","o","お",
"xa","ぁ","xi","ぃ","xu","ぅ","xe","ぇ","xo","ぉ",
"ka","か","ki","き","ku","く","ke","け","ko","こ",
"sa","さ","si","し","su","す","se","せ","so","そ",
"ta","た","ti","ち","tu","つ","te","て","to","と",
"na","な","ni","に","nu","ぬ","ne","ね","no","の",
"ha","は","hi","ひ","hu","ふ","he","へ","ho","ほ","fu","ふ",
"ma","ま","mi","み","mu","む","me","め","mo","も",
"ya","や","yi","ぃ","yu","ゆ","ye","ぇ","yo","よ",
"xa","ゃ","xi","ぃ","xu","ゅ","xe","ぇ","xo","ょ",
"ra","ら","ri","り","ru","る","re","れ","ro","ろ",
"wa","わ","wi","うぃ","wu","うぅ","we","うぇ","wo","を",
"n","ん","xtu","っ",
"ga","が","gi","ぎ","gu","ぐ","ge","げ","go","ご",
"za","ざ","zi","じ","zu","ず","ze","ぜ","zo","ぞ",
"da","だ","di","ぢ","du","づ","de","で","do","ど","dexi","でぃ",
"ba","ば","bi","び","bu","ぶ","be","べ","bo","ぼ",
"pa","ぱ","pi","ぴ","pu","ぷ","pe","ぺ","po","ぽ",
"kya","きゃ","kyu","きゅ","kyo","きょ",
"gya","ぎゃ","gyu","ぎゅ","gyo","ぎょ",
"sha","しゃ","shi","し","shu","しゅ","she","しぇ","sho","しょ",
"ja","じゃ", "ji", "じ","ju", "じゅ","je", "じぇ","jo", "じょ",
"cha","ちゃ","chu","ちゅ","cho","ちょ",
"nya","にゃ","nyu","にゅ","nyo","にょ",
"bya","びゃ","byu","びゅ","byo","びょ",
"pya","ぴゃ","pyu","ぴゅ","pyo","ぴょ",
"mya","みゃ","myu","みゅ","myo","みょ",
"rya","りゃ","ryi","りぃ","ryu","りゅ","rye","りぇ","ryo","りょ",
"va", "ヴァ","vi", "ヴィ","vu", "ヴュ","ve", "ヴェ","vo", "ヴォ",
"ichinichi","一日","asa","朝","hayaku","早","hayai","速",
"tenki","天気","ame","雨","kasa","傘","ohisama","お日様","furu","降",
"netui","熱","samui","寒","ondo", "温度","aga","上",
"kibun","気分","suki","好","yoi","良","warui","悪",
"kinou","昨日","kyou","今日","asu","明日","ikiru","生",
"sanpo","散歩","dekakeru","出","ayumi","歩","yuku","行",
"kuruma","車","mokuhyou","目標",
"tabe","食べ","gohan","ご飯",
"tuduki","続",
"naka","中",
"watasi","私",
"-","ー",
",","、",
".","。"
};
スケッチ本体です。
#include <string>
#include "fep.hpp"
const uint16_t data_end = (sizeof fep) / (sizeof(struct ath));
void setup() {
Serial.begin(115200);
Serial.println("");
Serial.println("Fep start");
Serial.println("");
//for (int i = 0; i < data_end; i++) Serial.println(fep[i].kk);
}
void loop() {
String line = "";
bool flg = false;
while (flg == false) {
while (Serial.available()) { // 1文字ずつ受信
char c = Serial.read();
if (c == 10 || c == 13) { // LF or CR
Serial.println(""); // Tera Term 上で改行
flg = true;
break;
}
if (c == 32) { // SP で変換操作
if (line.length() > 0) {
for (int i = 0; i < data_end; i++) { // 探索ループ
if (line.equals(fep[i].a)) {// 見つけたら
Serial.print(fep[i].kk); // 「かな漢字」に変換
}
}
}
flg = true; // 次の文字入力に進む
break;
} else if (c > 32 && c < 127) { // 繋いで文字列にする
line = line + c;
}
}
}
}
USBキーボードからの入力、TFTモジュール表示にすれば、編集も利きそうだし... これ、もっと本格的になるかな?
最後まで見ていただきありがとうございました。