先日作ったラズピコ用受信専用モデムの続きです。
双方向の半二重通信ができるようになりました。
細かいチュートリアルは📣RaspberryPi Picoとブラウザで通信するに書きましたので、手っ取り早くでON/OFFリモコンを体験する手順を書いてきます。
ハードウェアを作る。
この通りに配線します。
材料は以下の通り。
- 抵抗 100kΩ ✖ 1 、 10kΩ✖2
- コンデンサ 10μF✖ 1 、47μF以上✖ 1 (耐圧16V)
- ダイオード 適当な物✖2
- RaspberryPi pico ✖ 1
- 圧電素子 パッシブタイプの物で直径が2cmくらいのもの✖1
回路図です。
完成するとこんな感じになると思います。
ソフトを書き込む
まずはライブラリをArduinoIDEにセットアップしてください。
使うソフトはTBSKmodemMicroのArudino版です。
- https://github.com/nyatla/TBSKmodemMicro/releasesからTbskModemMicro-Ardiuno.zipをダウンロード。
- Arduino IDEを起動し、スケッチ→ライブラリをインクルード→Zip形式のライブラリをインストール...を選択。
- TbskModemMicro-Ardiuno.zipを追加してIDEを再起動。
IDEを再起動したら、次のスケッチをArudinoにコピペします。
#include "TbskModemMicro.h" using namespace TBSKmodemMicro; TbskPulseModulator<100> tpm; TbskDemodulator<100> dem; #define LED_PIN 25 #define AD_PIN 26 #define SP_PIN 26 bool current_led=true; void setup() { pinMode(LED_PIN, OUTPUT); //LED pinMode(AD_PIN, INPUT); pinMode(SP_PIN, OUTPUT); analogReadResolution(12); } void loop() { int r=-1; TMM_UINT8 recv[10] = {}; digitalWrite (LED_PIN,current_led?HIGH:LOW); pinMode(AD_PIN, INPUT); while(r==-1){ r=dem.read(AD_PIN,16000,recv,10,5000); } char status[7+3+1]; if(memcmp(recv,"on",2)==0){ //on sprintf(status,"status:on\0"); current_led=true; }else if(memcmp(recv,"off",3)==0){ //off sprintf(status,"status:off\0"); current_led=false; }else{ sprintf(status,"ERROR"); } delay(.5); pinMode(SP_PIN, OUTPUT); tpm.write(SP_PIN,16000,(const char*)status); return; }
コンパイルしてラズピコに書き込んでおいてください。
スマホと通信する
ブラウザ側のアプリは設置してあるものを使います。
ソースを見るとわかりますが、ペラッとした1枚のHTMLです。
https://nyatla.jp/tbskmodem/v0.4.1/getstarted/_on_off_sample_for_zenn.html
Startボタンを押してから、ONやOFFボタンを押してください。
音が鳴ればOK、準備完了です。
圧電素子で入出力を共用する場合、通信可能な物理条件がとてもシビアです。
スマホ内部のスピーカーとマイクの位置にも注意が必要です。
辛抱強く通信できる条件を探しましょう。
おしまい。