UTF-8 文字列から Shift_JIS へ変換する WROOM(ESP8266)用 Arduino IDE ライブラリを作ってみました

記事公開日:2016年2月22日

こんばんは。

WebSocketリアルタイム電光掲示板を作成中で、結構プログラムが長くなってきました。
そこで、文字コード変換もライブラリ化する必要に迫られたので作ってみました。

Arduino IDE はUTF-8コード入力ですが、日本語Windows PC のシリアルモニターはShift_JISコードがデフォルトですので、漢字表示は文字化してしまいます。
そこで、このライブラリを使えば、簡単なスケッチでシリアルモニターに漢字表示できます。

このライブラリは文字列の UTF-8 コードを一括して Shift_JIS コードに変換します。
ESP-WROOM-02 ( ESP8266 )専用の Arduino IDE ライブラリです。
半角カナやJIS13区文字も変換してくれます。

以前の記事でバイナリの変換テーブルファイルの使い方を説明しましたが、それをArduino IDEライブラリ化したものです。

これもMITライセンスです。自由に使ってやってください。

では、ザッとこの使い方を説明します。

ESP-WROOM-02はスイッチサイエンスさんの開発ボードが推奨です。

Amazon.co.jp
ESP-WROOM-02開発ボード
スイッチサイエンス(Switch Science)

Amazon.co.jp
ESPr Developer(ピンソケット実装済)
スイッチサイエンス(Switch Science)

このボードは使いやすくて、手放せません。
最近はこればっかり使ってます。
初めてこれを使う方はこちらのページを参照してください。

スポンサーリンク

1.予めArduino IDE にESP8266ボードとSPIFFSファイルシステムアップローダーをインストールしておく

何度もこのボードを使用されてる方は読み飛ばしてください。

予め、Arduino IDE にESP8266ボードをインストールしておきます。
インストール方法はこちらのページを参照してください。

Arduino IDEプラグインのSPIFFSファイルシステムアップローダーのインストール方法はこちらのページを参照してください。

2.自作ライブラリをインストールする。

自作したライブラリは、GitHub のこちらのページ にあります。
ZIPファイルをダウンロードして、解凍しておいてください。
解凍したファイルの “UTF8SJIS_for_ESP8266-master” というフォルダをフォルダごとArduino IDE の libraries フォルダにコピーしてください。
そうしたら、ライブラリが使用可能になります。

3.サンプルスケッチを入力する

サンプルスケッチはこんな感じになります。
ライブラリを使うと、だいぶシンプルになりますね。
因みに、ツィッターを見ていたら、char型やint、long型は使わない方が良いという情報があり、uint8_t型を使っています。こっちの方がバイト数が良く分かりますねぇ。

#include <UTF8toSJIS.h>

const char* UTF8SJIS_file = "/Utf8Sjis.tbl"; //SPIFFSファイルシステムで予めこのファイルをアップロードしておくこと

UTF8toSJIS u8ts;

void setup() {
  Serial.begin(115200);
  String str = "こんにちは!! 今日は晴れ時々曇り。半角カタカナも表示できます。";
  
  uint8_t sj_txt[str.length()];
  
  uint16_t sj_length;
  
  u8ts.UTF8_to_SJIS_str_cnv(UTF8SJIS_file, str, sj_txt, &sj_length);
  
  Serial.println();
  int i=0;
  for(i=0;i<sj_length;i++){ //Shift_JISコードを表示
    Serial.printf("%X,",sj_txt[i]);
  }
  Serial.println();
  for(i=0;i<sj_length;i++){ //Shift_JISコードをシリアルモニターにバイナリ出力
    Serial.write(sj_txt[i]);
  }
  Serial.println();
  
}

void loop() {
}

●1行目で自作ライブラリをインクルードしてます。

●3行目:ここでSPIFFSファイルシステムアップローダーでESP-WROOM-02のフラッシュへアップロードしたファイル名を定義しています。
ここで注意してほしいのが、スラッシュ “/” を必ず入れてください

●5行目:ライブラリのクラス名を定義

●11行目でバイト配列を定義しますが、最大数をstr.length()にするところが重要です。

●15行目が自作ライブラリ関数です。
配列sj_txtにポインタでShift_JISコードを返しています。
&sj_lengthは ‘&’ という文字が重要です。ポインタのアドレスを示しています。つまり、Shift_JISコードのバイト数を返しています。

次にこのスケッチを名前を付けて保存して、下図のようにそのスケッチフォルダを開いて下さい。

ews_beta13_04.jpg


そこに”data”フォルダを作成しておいてください。

ews_beta13_05.jpg


このdataフォルダに当方で自作したUTF-8 Shift_JIS 変換テーブルファイルをコピーします。
GitHubのこちらのページ から Utf8Sjis.tbl ファイルをダウンロードしてコピーしておいてください。
この変換テーブルファイルについてはこちらのページに詳細がありますので、ご参照ください。

そして、SPIFFSファイルシステムアップローダーをクリックするとESP-WROOM-02 のフラッシュへアップロードされます。

4.コンパイル実行させる

コンパイル実行させると、こんな感じでシリアルモニターに表示されます。

utf8sjis_lib01.jpg


最初の行はESP-WROOM-02 おなじみの起動時文字化けデータ。
これは無視して結構です。

2行目はShift_JISコードに変換された様子です。

3行目は文字コードをSerial.write でバイナリ出力すると文字として表示されます。

半角カナもちゃんと表示されてますね。

これで、Shift_JISコードのフォントデータも気軽に使えそうです。
プログラムの行数もかなり節約できました。

実は今、WebSocket通信リアルタイム電光掲示板が完成しつつあるのですが、これでも当ブログにアップするにはまだスケッチが大きすぎるんです。

さて、どうやって簡単にしようか・・・。

というわけで、今回はここまでです。
次回こそはリアルタイム電光掲示板をアップしたいと思います。

スポンサーリンク



Amazon.co.jp 当ブログのおすすめ
Amazon.co.jp
M5Stack Basic
スイッチサイエンス
Amazon.co.jp
ESPr Developer 32
スイッチサイエンス(Switch Science)
Amazon.co.jp
Amazon.co.jp

コメントを残す

メールアドレスが公開されることはありません。

*画像の文字を入力してください。(スパム防止の為)

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください