2023.07.23本記事はプロモーションが含まれています。こんにちは、ENGかぴです。XIAO用の拡張ボードはSDカードスロットやOLEDによる液晶画面での表示ができます。SDカードに保存した人感センサーの動作履歴のデータを読み込んでOLEDに表示する方法をまとめました。Studio)を使用しています。XIAOを使って動作確認を行ったことを下記リンクにまとめています。Studioから製作されています。このボードを使用するとOLEDに文字を表示したりSDカードを使用したりGrove端子を利用してセンサーと接続することができます。下記記事に拡張ボードについてとOLEDライブラリ追加の方法をまとめています。XIAOの拡張ボードのOLEDを使用する人感センサーの使い方については下記記事にまとめています。XIAOの拡張ボードのOLEDに表示します。人感センサー(SB612A)の使い方SB612Aは人体検出用に開発された集電センサーモジュールであり動作確認しやすいようにボート化されています。Ray)と表現され周囲の赤外線の変化によって人間の接近を検知するセンサーです。SB612Aでは調整できる項目が3つあります。感度調整(SENS)調光(DARK_ADJ)遅延時間調整(DELAY_TIME)SB612A内部のセンサードライバBM612に入力する電圧を可変抵抗で分圧して調整します。抵抗を表面から見た時反時計回りに回すと可変抵抗の抵抗が大きくなります。感度調整(SENS)は可変抵抗が大きくなると感度が低くなります。調光(DARK_ADJ)は可変抵抗が大きくなると明るい場所での検出感度が鈍くなります。遅延時間調整(DELAY_TIME)は可変抵抗が大きくなるほど遅延時間が長くなります。XIAOのDIに入力するとDIの状態変化によってセンサーの動作が確認できます。電源はモジュール内にコンバータが内蔵されているためDC3.3VからDC12Vまで印加することができます。人感センサーの出力はCMOS出力及びオープンコレクタ出力を選択して使用することができます。}}SDカードはSPI通信を使用するためSD.hとSPI.hの2つのライブラリをインクルードする必要があります。拡張基板はSDカードのスレーブ選択に2ピンが接続されているため2ピンをスレーブ選択専用のDOに割り振る必要があります。SDカードにアクセスした際の戻り値をセットするFile型のクラス変数であるmyfile(名前は任意でよい)を準備します。myfileはSDカードの中のファイルに関する情報等を管理するために使用します。SDライブラリのbegin()関数を使用してSDカードに関する情報を初期化します。引数にはSDカードを選択するためのスレーブセレクト(SS)のピン番号を指定します。SDカードが挿入されていない場合など失敗した場合は戻り値がfalseになるので失敗したときの処理を入れます。SDカードにデータを書き込む方法の一例を示します。//ファイルを閉じる}open()関数でファイルを書き込みモードで開きます。open()関数の第1引数にはファイルのパスを指定し、第2引数に書き込みを示すFILE_WRITEを指定します。ファイルが開けたらprint()関数やwrite()関数を使用してデータを書き込みます。print()関数を使用して「Sensor->OK」と電源ONからの経過秒数(変数seccnt)をテキストデータで書き込みます。SDカードのデータ区切りには改行コード(println()関数)を入れています。データを書き込んだ後はファイルを閉じるためclose()関数を使用します。//格納した文字列をOLEDに表示}open()関数でファイルを読み込み専用で開きます。第1引数にはファイルのパスを指定し、第2引数に読み込みを示すFILE_READを指定します。ファイルのopenに成功するとFileオブジェクト(myfileで宣言した変数)に戻り値として状態が引き継がれるためmyfileを使ってデータの読み込みを行います。Fileオブジェクトのavailable()関数を使って読み込むデータが存在するかを確認します。データが存在する場合は0より大きな値になるためRead()関数を使ってデータを読み込みます。例ではReadStringUntil()関数を使って改行コードが見つかるまでデータを読み込んでいます。改行コードまで読み込んだデータは1行分のデータ(履歴データ)になります。btncntはボタンを押した回数(表示する履歴の番号)としているのでReadStringUntil()関数で読み込んだ履歴データの回数とbtncntが一致する場合が表示する履歴になります。一致したときの文字列をoled_strに一時格納してoledに表示します。XIAOの拡張基板の裏面にSDカードモジュールが実装されています。XIAOはDIがLOWからHIGHになったタイミングで電源ONから経過した秒数をシリアルモニタに表示してSDカードに保存します。動作結果(データの確認)人感センサーに手をかざして反応させるとシリアルモニタに「Sensor->ok」に続けて電源ONからの経過秒が表示されていることが確認できました。同様のデータがSDカードに保存されているのを確認しました。動作結果OLEDの表示SW1を押すとSDカードのデータを読み込んで履歴を表示しています。HISTは最新の動作履歴であり最新の動作状況を表示しています。LISTはSW1を押した回数の履歴を表示します。LISTに表示されています。履歴データがない場合は空白の表示になります。以下のソースコードはコンパイルして動作確認をしております。コメントなど細かな部分で間違っていたりやライブラリの更新などにより動作しなくなったりする可能性があります。参考としてお使いいただければと思います。u8x8.print(oled_str);}関連リンクArduinoのライブラリを使って動作確認を行ったことを下記リンクにまとめています。広告マイベスト3年連続1位を獲得した実績を持つ実践型のプログラミングスクール最後まで、読んでいただきありがとうございました。2022)はWindowsやAndroidなどで動作するアプリケーションを開発するための総合開発環境です。Communityは基本無料で使用できるためプログラムの学習にお勧めです。XIAOでFreeRTOSを実装するFreeRTOSライブラリを使用するとマルチタスクの動作ができます。BME280から温湿度・気圧の情報を取得しLCDに表示するタスクと動作中であることを表示するLEDを点灯/消灯させるタスクを登録して動作確認を行いました。SHIELDを実装するとEthernetライブラリを使用してLAN通信ができます。DHT20モジュールから取得した温湿度の情報をHTTPで応答するWebサーバーを実装して動作確認を行いました。組み込みエンジニアESP32-WROOM-32Eで学べるソフト開発と標準ライブラリの使い方ESP32-WROOM-32EはArduino環境でソフト開発ができるため標準のライブラリで各種センサーの動作確認ができます。ソフト開発に対して苦手意識があり敷居が高く感じていた方でも簡単に動作確認ができるためお勧めのモジュールです。XIAO31ESP32-WROOM-32E37TWELITE(トワイライト)26PIC16F182731PIC12F67522ノウハウ(体験談)36趣味と生活29その他6タグオペアンププロフィールENGかぴ当ブログの運営者のENGカピです。組み込みエンジニアとして10年以上の経験を活かしてセンサーモジュール等の動作確認したことをまとめています。広告、アフィリエイト収益で当ブログを運営させていただいております。defined.")}))})()タイトルとURLをコピーしました。