2025年10月5日日曜日

2ch温度ロガーの製作(7;トラブル解消)と自作ラジオ修理

 前回、ユニバーサル基板に載せたら液晶表示ができなくなったと書きましたが、さんざん調べた後でとんでもない凡ミスだったことに気付きました。

I2CのSDA(IO21),SCL(IO22)の論理ピン名と、ESP32の物理ピン番号を間違えていて、SDA(IO21)を物理ピン21へ、SCL(IO22)を物理ピン22へ繋いでいました。先週から何度もチェックしたり、半田付け具合を確認していましたが全く気付かずにいました。今朝の朝食後にタブレットで何気なくピンアサイン表を眺めていて突然気付いた次第。トホホです。


先日書いたように熱湯で温度センサを入れたガラス管が割れたので、ガラス管は取り除き、UVレジンを再度塗って硬化しているところ。


そんな訳で、普段はsleepさせて測定時のみwake-upするようなプログラム修正はまだです。プログラムは平日でもできるので今週時間をみてやるつもり。加齢なのか眼が疲れやすくなっていて、平日の夜は基板などの細かい作業はできない。

昨日、6年前にAmazonの箱とダイソー300円スピーカで作ったFMラジオが突然鳴らなくなりました。普段、かみさんがキッチンの窓際に置いて聴いているので段ボールが日焼けして白くなっている。2代目として本気出してMDFで作ったラジオはリモートワーク部屋に置いてある。最近はほぼ出勤であまり使わなくなった。

当初エネループの電池切れだと思い充電した後、取り付けようとしたときに電池ボックスが壊れていたことに気付いた。外すときには気付かなかった。


手元に適当な電池ボックスがなかったので、リチウム電池仕様に変更しました。使用しているFMラジオモジュールの電圧が3.6Vまでなので、リチウム電池の3.7Vは若干定格オーバですが大丈夫でしょう。ダイソーの300円スピーカのアンプは元々5Vなので大丈夫。


起動時の電池残量チェッカはフルです。元々3Vでフルになるようにしてあるので当然ですが。減ってきたときでもフル表示になりそう。


最近はこの300円スピーカは売ってないようですが、ストックが1個あるのでもう少し大きなエンクロージャを作ってみようかと思っています。Amazon段ボールに収めたラジオはエンクロージャは元のスピーカをそのまま内蔵しているだけなので、音はそれなり。

2025年9月29日月曜日

1週間遅れの彼岸花

1週間遅れでようやく彼岸花(ヒガンバナ)が咲きました。今年は記録的な猛暑の影響で流石にヒガンバナの内蔵タイマもズレたのでしょう。 まだ半分くらいは蕾です。

ヒガンバナについては 一昨年にも書いていましたが、そのときはピッタリでした。

それにしても廻りの雑草がひどいな。

2025年9月28日日曜日

2ch温度ロガーの製作(6;ユニバーサル基板苦戦中)

温度ロガーをケースに収めるためにユニバーサル基板に実装しています。主要部品の実装が完了したので、プログラムを書きこんでみました。写真右上に見えるピンソケットが書き込み用の端子。

 無事に書き込めましたが、液晶画面に何も表示されません。通常だと最初にWiFi接続中のメッセージが表示されるはずがダメです。そこで適宜デバッグのためにSerial.printlnを入れてどこまで動いているか見てみました。シリアルモニタで見ると処理は正常に動作しているようです。温度ログもmicroSDにも書き込めています。


液晶ディスプレイが壊れたのかと思い、一旦外してブレッドボード版に挿し直してみると何事もなく表示されます。液晶ディスプレイへの配線は、電源・GNDの他には2本しかありません。それでもESP32のピン位置を何度も目視確認し、テスタでも導通確認しましたが分かりません。

疲れたので今日はここまで。おそらく単純な原因だと思う(思いたい)。

あと、Liイオン電池からの電源を手持ちの3端子レギュレータで3.3Vにしようとしていましたが、入力電圧がLiイオン電池の3.7Vでは電位差が足りないですね。低ドロップのものをアリエクで注文しました。届くまでしばらくかかるので、液晶に表示されない原因究明ものんびりやります。


2025年9月27日土曜日

2ch温度ロガーの製作(5;ケース加工)

温度ロガーはユニバーサル基板に載せてケースに収めることにしました。

基板や部品を手元にあったタカチのケースに収める検討を行い、取り合えず液晶画面の表示窓を開けたところ。写真は液晶を裏からマスキングテープで仮止めした状態です。

測定間隔の時間設定はmicroSDに設定ファイルを置いていましたが、時間設定を変えるたびにファイルを書き換えるのが面倒でした。測定間隔は1秒、10秒、30秒、1分、10分位で十分なので、タクトスイッチ(黄色)で切り替えるようにするつもりでスイッチの穴を開けています。プログラムはこれから。


その他、microSDスロット、電源スイッチ、充電端子、温度センサのケーブルの穴を開けたところで今日の作業は終了。


Liイオンバッテリで動くようにします。省電力化のために普段はsleepさせて、測定間隔で目覚めて測定するようにするつもり。でも液晶は表示しっぱなしにするのでそれほど長期間の測定はできないと思う。まぁ1か月も測定できれば十分。

基板に載せるのは、ESP32microSDスロット基板、Liバッテリの充放電モジュール液晶画面タクトスイッチです。基板への搭載位置とケースの穴開け位置を合わせるのに少々手間取りました。写真に写ってませんが3.3Vの3端子レギュレータ電解コンデンサも載ります。

2025年9月23日火曜日

2ch温度ロガーの製作(4;評価)

先日、温度がずれているのでAD変換の電圧範囲を変えて無理やり合わせた、と書きましたが、温度センサMCP9700Aのオフセット電圧(0℃の時の出力電圧)を間違えていたのに気付きました。0.5Vが正しいのですが、0.4Vで計算していました。

また、ESP32のAD変換のキャリブレーション値による補正ですが、analogReadMilliVolts()で取得すれば補正後の電圧がミリボルト単位で取得できるということで試してみました。室温は手元にあった温度計と比較してほぼ近い温度が表示されています。28.0℃と28.2℃は温度センサの個体差でしょう。ちなみにAD変換は100回測定した平均値を使っています。


次に熱湯氷水で確認してみます。温度計はオーブン料理や低温調理のときに肉の塊などに挿して中の温度を測れるもので測定範囲が-50℃~300℃です。先端が尖っています。マグカップはサーモスの真空断熱カップ。2つの液晶表示を同時に撮るためにブレッドボードはティッシュの箱に載せています。室温ではほぼ同じ温度を示しています。


以下、アマゾンのリンクです。




真空断熱マグカップは夏場にアイスコーヒーなどの冷たい飲み物を入れも結露しないので重宝しています。

熱湯を注ぎました。温度ロガーはセンサ部がガラス管のジャケットに包まれているため、温度上昇がゆっくりでしたが、最終的にはほぼ同じ温度を示しています。当初90℃以上ありましたが、ロガーの温度が落ち着くまで少し冷めました。


最後に氷水です。こちらも温度ロガーはゆっくり下がっていきますがほぼ同じ温度でおちつきました。


1秒毎に記録した温度変化のログです。センサ1がマグカップに入れた方、センサ2は室温です。センサ1は冷たいマグカップに入れたので最初は温度が若干下がっています。熱湯は少しづつ注いだので温度変化が一定ではありません。また、センサをお湯から出したときも放置ではなく触ったりしていたので一定ではありません。触った理由は後述。

正確度はあまりないかも知れませんが、自分の用途には十分です。


熱湯を注いだときにピキッという音がして、お湯から出すときに確認したらガラス管のジャケットが割れていました。急激な温度変化はストレスになるかと思い、ゆっくり注いだのですがダメでした。レジンで防水されているので一応は絶縁されていますが、若干不安なのでもう一度レジンで固めるつもり。


一応、必要なものができました。ケースに入れるかは未定。当面このまま使うかも。

2025年9月20日土曜日

2ch温度ロガーの製作(3;温度センサ)

温度センサをケーブルで伸ばしてジャケット(ガラス管)に入れる工作です。温度センサは ニキシー管時計を作ったときにコロンのネオン管を収めた 小さいガラスチューブに丁度入りました。少量で購入できなかったのでまだ大量に残っている。


ケーブルは秋月で購入した4芯のスリムロボットケーブルを1mに切って利用。センサには3芯で足りますので1本は未使用です。


温度センサのデータシートに記載があったので電源GND間に0.1uFのセラコンを入れました。ガラスチューブに入ることを確認。


片方のセンサを指先で触ってみると温度が上昇したので、動作もOKそうです。


ガラスチューブに収めます。センサ部の熱容量が大きくなって、温度変化への追従性は低くなりますが、それほど急激な温度変化は想定していないので大丈夫でしょう。


昔、ダイソーで購入したUVレジンで封印します。かなり前に買ったのですがまだ使えました。


ガラスチューブにUVレジンを入れますが、細いチューブのためスムーズに入らず内部に気泡ができたのを爪楊枝で突いたりしてなんとか7分目辺りまで入れました。その後、センサーをゆっくり挿入して丁度溢れるギリギリでした。

木片に浅い穴を開けてチューブを立てて、紫外線ランプに当てます。この紫外線ランプはその昔、感光基板を露光するために自作したもの。10Wの紫外線ランプ2本とアルミ板の反射板と木枠です。今なら紫外線LEDですね。


封入完了。15分ほどランプを当てていたので少し温度が上がっています。


片方のセンサにヒートガンの熱風を当ててみた様子です。80℃を越えました。


次は氷と熱湯で温度を確認してみるつもりです。

2025年9月16日火曜日

2ch温度ロガーの製作(2;MicroSDに記録)

温度ロガーに秋月マイクロSDカードスロットDIP化キット(写真左上に写ってます)を繋いで、ログを記録できるようにしました。


取り合えずリビングに置いて、昨夜から先ほどまで1秒ごとに22時間ほどログを取ってみた結果です。タイムスタンプ2ch分の温度を1行にカンマ区切りで記録。全部で82,000行近くになりExcelが重い。測定は1分毎でよかったですね。測定間隔はmicroSDに格納したsetupファイルで制御できるようにするつもり。


昨夜20時頃にエアコンを止めたので徐々に温度が上昇して28度前後で推移し、明け方少し下がった。夜明けとともに昼まで上昇してピークは33度くらい。その後エアコンを入れたようで下がっています。microSDには2ch分記録していますが、グラフにするとほぼ重なるので上記グラフは1ch分のみ。

温度センサは今はブレッドボードに挿さっていますが、ケーブルで伸ばして2chそれぞれ別の温度が記録できるようにする予定。

2025年9月14日日曜日

2ch温度ロガーの製作

見守りセンサの工作は進んでいませんが、別の工作を思いついて2chの温度ロガーを作り始めました。温度ロガーが目的ではなく、手段として必要になった次第。市販の製品は高いので簡易的なものをサクッと作ります。


 ESP32を使っていますがntpで日付と時刻を取得するためだけで、温度データをWiFiで送るつもりはありません。まだ実装していませんがmicroSDに記録しようと思っています。精度もそれほど必要ではなく、簡易的なロガーです。

温度センサはMCP9700Aという3端子のアナログ出力のものを試しています。温度に比例した電圧がでてくるのでAD変換します。ESP32はAD変換のキャリブレーションがあるようですがまだ調べ切れていません。当初、室内にある温度計より低めの温度がでてきたので、本来の電圧範囲の3.3Vを勝手に3.5Vとして計算してみたらそれっぽい温度を示しました。上の写真はノートパソコンの上に置いたのでちょっと高めになっています。

こんな場当たり的な対策ではダメだと思いますが、取り合えず大まかな温度変化がとれればよいのでひとまずこれで。

2025年9月13日土曜日

丸形蛍光灯をLEDタイプに交換

三連休、すこし涼しくなったのはよいのですが、ときどき小雨が降る天候で遠出や観光には残念ですね。個人的にはどこにも出かけずDIYと電子工作の予定なので問題ないです。ただ、先週から目の奥が疲れているような痛いような症状が続いていて細かい作業ができそうにない。

そんな中、洗面所兼脱衣所の照明が少し暗くなってきたのと、2027年度までに蛍光ランプの製造や輸入が廃止されるらしいこともあってLED化してみました。

年季の入ったデザインとくすみ具合が長い年月の経過を滲ませている。


購入した丸形LEDは、丸形蛍光管の価格とほぼ同じ価格で、30Wが16Wになって約半分の省エネにもなってよい。寿命も通常なら長いはず。照明器具がグロー式(点灯管式)ならグロー管を外すだけで交換可能というもの。


led蛍光灯 丸型 30形 FCL30W代替 30W形相当 G10q口金 丸型蛍光灯 LED グロー式 工事不要

点灯も瞬時になるというが、これまでも電子点灯管を使っていてすぐに点灯していたので、そこはそれほどメリットはない。

カバーをとって蛍光管と点灯管を取り外してみると、内部が蛍光灯の紫外線で結構日焼けしているのが目立つ。このままだとちょっと残念なので、白いラッカースプレーで塗装することにしました。丁度、以前の工作の残っていたスプレーがあったので。


天井から取り外して工作部屋へ運び、分解です。写真中央の白い丸は金属製の部品が載っていたところ。2か所の白い四角はラベルを剥がしたあと。元々この色だったのですね。塗装する前に写真右上に写っている四角いスポンジ紙やすりでやすって足付けをしました。


ついでに電気関係で不要となる安定器点灯管ソケットを取り外し、配線を直結。


白いラッカースプレーで塗装したところ。微妙に残量が足りなくて1回塗りしかできず、薄っすらと日焼けが透けて見えるが、よしとします。


天井に戻してカバーを取り付ける前に点灯確認。かなり明るくなりました。また以前の電子点灯管と比べてもはやく、瞬時に点きます。LEDの粒粒も見えないタイプでよかった。


塗装が乾くまでに掃除しておいたカバーを取り付けて作業完了です。これまでカバー越しにも薄っすら見えていた日焼け痕が見えなくなってよかった。

照明器具が密閉タイプなので熱がこもる心配はありますが、それほど長時間点灯しっぱなしにはしないので大丈夫かな、と思っています。

今回、塗装し直したりしたので大がかりになっていますが、通常は点灯管を外して、蛍光管を交換するだけで済むのでもっと簡単です。我が家には他には丸形を使っている場所はないのですが、直管式の蛍光管は残っているので順次交換していこうと思っています。

2025年9月7日日曜日

LINEに通知する見守りセンサ(その3;部品配置検討)

午前中、強い日差しの中で草むしりや庭木の剪定などをしたためか、目がしょぼしょぼして眼精疲労?加齢? そんな中、見守りセンサの部品配置と収納ケースの検討を行いました。あまり時間が取れず、ユニバーサル基板をカットして大まかな配置検討したところまで。


一番大きな部品はESP32、こんな端子数の多いものは不要だけど手元にあったのでこれを使う。電源はUSB-TypeCコネクタから5Vを給電することにして、秋月の電源だけ供給できるTypeCモジュールを利用。5Vから3.3Vへは3端子レギュレータを使う。ケース内の左側に写っている人感センサLEDはケースの側面に穴を開けて取り付ける予定。

タクトスイッチは基板の裏面に取り付けてケースの表側から押せるようにする。写真のタクトスイッチでは小さくて押しにくそうなので大きなものに変更するかも。6ピンのピンヘッダコネクタはESP32へのプログラム書き込み用端子。ここにシリアルの書き込み機を挿してプログラムを書き換える。

今週末は3連休なので完成まで行けるか? 平日はセンサが正常に動作していることの確認のために月に一回程度、LINEに通知するプログラムを書くつもり。大したプログラムではない、と思う。

2025年9月4日木曜日

タカチのケースを色々購入

久しぶりの雨で少し涼しくなりました。と言っても30度だけど、昨日まで暑すぎたのでこれでも涼しく感じる。

見守りセンサ を入れるために購入したタカチのケースが届いた。右上のケースが第一候補だが、送料を薄めるためにいつか使うだろうと色々買ってみた。幾つかは使わないでデッドストックになりそうだけど。

ショップのメニュー画面では、全て難燃性ABSとなっていたけどパッケージは赤色のみに記載があり、黒文字のものは特に記載なし。本当にすべて難燃性なのか?

今週末は工作の時間が取れるか微妙なので、完成はもうしばらく先になると思う。見守り動作がちゃんと活きているかの確認のためにプログラムも一部見直したい。電源が切れていたり、WiFiの不具合などでメッセージが飛ばないと困る。月に1回程度は人感センサが感知したタイミングで見守り中であることをLINEにメッセージすることで少しは安心。

他にも作りたくなったものがでてきており、頭の中で構想中。週末に手持ちの部品の在庫を確認して具体化するつもり。

2025年8月24日日曜日

LINEに通知する見守りセンサ(その2;プロトタイプ)

久しぶりの電子工作は、テレビドラマにもなっている ひとりでしにたい を読んでから孤独死が気になりだして作った、24時間ひとの動きが無かったときにLINEに通知する見守りセンサです。24時間だと心配なら12時間でもよいけど、ぐっすり寝ていたり冬の寒い時期は12時間くらい動き出さないことがあるかも。まぁこの辺は活動時間などをみて適宜調整。

LINEにメッセージを送る方法は以下のサイトを参考にさせて頂きました。利用するには事前にLINEへ登録する必要があります。

ひとの動きは人感センサで検出します。家の中で必ず動く場所、例えば冷蔵庫前やトイレなどの動線近くにセンサを置けば、1日に数回は検出されるはず。

電源を入れると最初に以下のようなメッセージがLINEに届きます。

以下はテストのために、動きが検出できないまま 1H経過で黄色LED点灯、2H経過で赤色LED点灯とLINEメッセージ送信に設定しています。本番では12H、24Hにします。

以下は1H経過後に黄色LEDが点灯している様子を少し離れたところからzoomで撮影。近づくと人感センサが反応して緑色に変わってしまうため。黄色表示は見ることないので、なくてもよいかも。


そして、人の動きが無くなって2H(本番では24H)経過後にメッセージが届いた様子です。LINEのタイムスタンプが3時間半近くになっていますが、途中でセンサに近づいたためです。何事もなければ24H以内にセンサに検知されるはずなのでメッセージは飛んできません。


届いたら誤報であることを願って電話などで安否を確認します。近所なら駆け付けられますが、遠方だと電話か近所の人に様子を見に行ってもらうとか。田舎だと近所付き合いも多少はあるので。

25.08.25追記
--
昨夜一晩動かしっぱなしにした結果です。2時間おき(本番は24時間おき)にLINEへメッセージが届いていました。ちゃんと動作している模様。朝、センサに近づいたら点灯していた赤色LED(動きが無くメッセージを送信した状態)が、緑色LEDの見守り状態に変わるのが確認できました。

--

回路図です。ESP32開発キットを使っているので、電源などはUSBから供給です。ユニバーサル基板に載せ替えるときにちゃんとした回路図を書くつもりです。


スケッチ(プログラム)です。無保証です。まだ24Hの動作確認はしていませんし、デバッグも不十分かと思っています。

処理内容は上記手書きのメモに準じています。不在スイッチ(旅行などのときに押す)を押してから、しばらくは検知しないようにしています。検知すると不在から復帰してしまうので。例えば家を出る20分前には押してもらうとかする。押し忘れても24Hおきにメッセージが来るだけなので、そんなに問題はないか(一度電話すれば確認できるので)。

テスト用に黄色まで1H、赤色(メッセージ送信)まで2H、不在スイッチ押下の保留時間1分にしてあるので適宜変更してください。

WiFiのSSID,PW、LINE Messaging APIのチャンネルID, PWは各自のものに変更してください。

//-----------------------------------------------------------------------------
//                                                              2025.08.24 naka
// LINE通知する見守りセンサ
// ・人感センサで活動をモニタリング
// ・起動時に見守り開始のメッセージをLINEに送る
// ・一定時間(24H)活動がないとメッセージをLINEに送る
// ・その後も活動がないと一定時間(24H)毎にメッセージを送り続ける
// ・旅行などで不在になる場合は「不在」スイッチを押すと見守り停止
// ・不在から復帰(人感センサが反応)したら、自動的に見守り再開
// ・LED表示で見守り状態を示す
//   - 緑LED点灯:見守り中、緑LED点滅:不在(見守り停止中)
//   - 黄LED点灯:12H活動反応なし
//   - 赤LED点灯:24H活動反応なし、LINEメッセージ送信
//-----------------------------------------------------------------------------
#define SENSOR      4
#define SW          5
#define LED_GREEN  15
#define LED_YELLOW 16
#define LED_RED    17

#include <WiFi.h>
#include <HTTPClient.h> 
// LINE messaging API
const String token_url = "https://api.line.me/oauth2/v3/token";
const String msg_url   = "https://api.line.me/v2/bot/message/broadcast";
const char ssid[]      = "XXXXXXXX";
const char password[]  = "XXXXXXXXXXXX";
const char channel_id[] = "XXXXXXXXXX";
const char channel_pw[] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
const String messageBegin    = "見守りを開始します。";
const String messageNoactive = "お母さんの活動が24時間不明です。至急連絡してください。";

// Timer setting
volatile uint32_t count = 0;
volatile uint32_t waitingTimeCount = 0;
volatile int      status = 0; // 0:見守り中, 1:12時間経過、2:24時間活動なし(メッセージ送信)、3:不在中 
//const uint32_t LimitRed    = 60 * 60 * 24;  // 24時間
//const uint32_t LimitYellow = 60 * 60 * 12;  // 12時間
//const uint32_t WaitingTime = 60 * 30;       // 30分 不在スイッチを押してからの退出までの待ち時間(不在スイッチを押した直後に人感センサが反応しないように)
const uint32_t LimitRed    = 60 * 60 * 2;  // 2時間
const uint32_t LimitYellow = 60 * 60 * 1;  // 1時間
const uint32_t WaitingTime = 60;           // 1分 不在スイッチを押してからの退出までの待ち時間(不在スイッチを押した直後に人感センサが反応しないように)

hw_timer_t * timer = NULL;
void IRAM_ATTR countUp() {
  if (status<3) count++;  // 見守り中, 3:不在中
  else if(status==3 && waitingTimeCount>0) waitingTimeCount--; // 不在スイッチを押してからの退出までの待ち時間カウントダウン
}

void setup() {
  pinMode(SENSOR,     INPUT);
  pinMode(SW,         INPUT);
  pinMode(LED_GREEN,  OUTPUT);
  pinMode(LED_YELLOW, OUTPUT);
  pinMode(LED_RED,    OUTPUT);
  digitalWrite(LED_GREEN,  LOW);
  digitalWrite(LED_YELLOW, LOW);
  digitalWrite(LED_RED,    LOW);
  status = 0;

  // タイマ割り込み設定
  timer = timerBegin(1000000);
  // Attach onTimer function to our timer.
  timerAttachInterrupt(timer, &countUp);

  // Set alarm to call onTimer function every second (value in microseconds).
  // Repeat the alarm (third parameter) with unlimited count = 0 (fourth parameter).
  timerAlarm(timer, 1000000, true, 0);

  // 動作確認のために動作開始メッセージを送る
  wifi_connect();              // WiFi接続
  send_msg2line(messageBegin); // LINE notifyに見守り開始メッセージを送る
  wifi_disconnect();           // WiFi接続解除

}

void loop() {
  if (waitingTimeCount>0) {}
  else if (digitalRead(SENSOR)==HIGH) {
    count  = 0;
    status = 0;
  }
  else if (count>LimitYellow && status==0) {
    status = 1;
  }
  else if (count>LimitRed) {
    count  = 0;
    status = 2;
    wifi_connect();                 // WiFi接続
    send_msg2line(messageNoactive); // LINE notifyに活動がない旨のメッセージを送る
    wifi_disconnect();              // WiFi接続解除
  }

  if (status==0) {
    digitalWrite(LED_GREEN, HIGH);    
    digitalWrite(LED_YELLOW,LOW);    
    digitalWrite(LED_RED,   LOW);    
  }
  else if (status==1) {
    digitalWrite(LED_GREEN, LOW);    
    digitalWrite(LED_YELLOW,HIGH); 
    digitalWrite(LED_RED,   LOW);
  }    
  else if (status==2) {
    digitalWrite(LED_GREEN, LOW);    
    digitalWrite(LED_YELLOW,LOW); 
    digitalWrite(LED_RED,   HIGH);
  }
  else if (status==3) {
    blinkLED(LED_GREEN);
  }

  // 不在スイッチ確認
  if (digitalRead(SW)==LOW) {
    while(digitalRead(SW)==LOW) delay(10); // チャタリング対策
    count  = 0;
    status = 3;
    waitingTimeCount = WaitingTime; // 待ち時間設定
  }

}

void blinkLED(int LED) {
  digitalWrite(LED,HIGH);
  delay(50);
  digitalWrite(LED,LOW);
  delay(900);  
}

void wifi_connect() {
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
    }

    // 以下5行は、普通は不要なハズ(我が家のアクセスポイントは無いと繋がらない)
    IPAddress gateway(192,168,0,1);
    IPAddress subnet(255,255,255,0);
    IPAddress dns1(8, 8, 8, 8); // Google DNS primery server
    IPAddress dns2(8, 8, 4, 4); // Google DNS secondary server
    WiFi.config(WiFi.localIP(),gateway,subnet,dns1,dns2);    
}

void wifi_disconnect() {
    WiFi.disconnect(true);
}

String get_token() {
    HTTPClient http;

    http.begin(token_url);
    http.addHeader("Content-Type","application/x-www-form-urlencoded");

    String  body = "grant_type=client_credentials&";
            body += "client_id=" + String(channel_id) + "&";
            body += "client_secret=" + String(channel_pw);
    int httpCode = http.POST(body);
    String token="";
    if(httpCode == 200){
        String S = http.getString();
        int i = S.indexOf("\"access_token\"");
        if((i>0) && (S.substring(i+15, i+16).equals("\""))){
            token = S.substring(i+16, i+16+174);
        }
    }
    else{ 
      // エラー:黄色LED 5点滅
      blinkLED(LED_YELLOW);
      blinkLED(LED_YELLOW);
      blinkLED(LED_YELLOW);
      blinkLED(LED_YELLOW);
      blinkLED(LED_YELLOW);
    }
    http.end();
    return token;
}

void send_msg2line(String message) {  
    String token = get_token();
    if (token.length()!=174) { // エラー:赤色LED 5回点滅
      blinkLED(LED_RED);
      blinkLED(LED_RED);
      blinkLED(LED_RED);
      blinkLED(LED_RED);
      blinkLED(LED_RED);
      return;
    }
  
    HTTPClient http;
    http.begin(msg_url);
    http.addHeader("Content-Type","application/json");
    http.addHeader("Authorization","Bearer " + token);
    String json = "{\"messages\":[{\"type\":\"text\",\"text\":\"" + message + "\"}]}";
    http.POST(json);
    http.end();

}

//---------------------------------------------------------------
// EOF
//---------------------------------------------------------------

2025年8月23日土曜日

LINEに通知する見守りセンサ(その1;人感センサ確認)

先日思いついたLINEに通知する見守りセンサを作ってみようと、アマゾンで注文した人感センサが届きました。3個で645円なので1個当たり 215円。その昔はパナソニックのNapionというセンサを使いましたが、当時1,000円位していた。精確な特性などは分からないけど、個人の電子工作なら安いモノで十分。




取り合えず、先日の回路メモ(下記)のようにブレッドボードに部品を載せてみたところです。まだ人感センサがオンになったときに赤色LEDが点灯するプログラムのみ。手をかざすと点灯し、離すと消えます。離さなくてもしばらくすると消えます。人が発する赤外線の変化によってオンになるので、手をかざしたまま変化がないとオフ。



取り合えず人感センサが動くことが分かったので、明日の朝、見守りのプログラムを書いてみようと思います。最近、加齢のためか朝4:00頃に目が覚めてしまう。