Arduino UNO R4 Minima で制御していた部分を Raspberry Pi Pico に置き換えてみた(*´ェ`)
カテゴリー: プログラミング
温度をLEDの色で表示する
部屋の温度をLEDの色で表示する機器を作ってみたくなった(*´ェ`)
使用した部品は
・マイコン内蔵RGBLED WS2812B 7つ
・温湿度センサー モジュール AHT25 7つ
・TCA9548A I2C Multiplexer 2717 1つ
温度の取得や色の設定は Arduino UNO R4 Minima で行う(*´ェ`)
温度と色の関係は色相環の赤(0°)を40℃上限として、青(255°)を下限(0℃)で表すことにした(*゚ェ゚*)
25℃くらいなので緑色になっている(*´ェ`)
温湿度センサーを手で覆って温めると黄色く変化した(*´ェ`)
GNSSロガーで飛行機の軌道を追ってみた
先月と先々月に北海道に行く機会が会ったので以前作ったGNSSロガーを持っていくことにした(*´ェ`)
最初に持って行った時は行きだけ使用して帰りは窓際に座れなかったので使用しなかった…(*´ェ`)
2回目に行った時は行きと帰り窓際に座れたので使用してみた(゚ェ゚)
SPRESENSEを使用して作成したGNSSロガーを加工したケースに入れて絶縁テープで止めた(*´ェ`)
設定は5秒に1回、以下のようにSDカード追記されていく(*´ェ`)
$GPGGA,092305.00,3943.3526,N,14004.1925,E,0,00,25.5,13347.0,M,0.0,M,,*61 $GNGLL,3943.3526,N,14004.1925,E,092305.00,V,N*63 $GNGSA,A,1,,,,,,,,,,,,,25.5,25.5,25.5,*30 $GPGSV,3,1,10,05,15,146,,10,22,316,,12,21,161,,13,22,78,,1*5B $GPGSV,3,2,10,14,5,34,,15,55,77,,18,26,231,40,22,19,49,,1*6B $GPGSV,3,3,10,23,58,306,,24,86,306,26,,,,,,,,,1*65 $GPGSV,3,1,10,05,15,146,,10,22,316,27,12,21,161,,13,22,78,,7*58 $GPGSV,3,2,10,14,5,34,,15,55,77,,18,26,231,43,22,19,49,,7*6E $GPGSV,3,3,10,23,58,306,31,24,86,306,36,,,,,,,,,7*60 $GLGSV,3,1,9,65,63,6,,66,24,314,,72,33,96,,74,24,33,,1*4C $GLGSV,3,2,9,75,68,94,,76,30,184,,81,16,295,,82,7,339,,1*4A $GLGSV,3,3,9,88,8,244,29,,,,,,,,,,,,,1*40 $GQGSV,1,1,4,02,22,163,16,03,19,197,,04,80,219,,07,42,200,29,1*5A $GQGSV,1,1,1,61,,,35,,,,,,,,,,,,,4*50 $GQGSV,1,1,4,02,22,163,25,03,19,197,,04,80,219,,07,42,200,38,7*5C $GBGSV,5,1,17,02,19,249,33,03,37,223,35,06,40,241,40,08,76,278,,1*76 $GBGSV,5,2,17,09,23,236,,13,66,294,,16,41,241,42,23,47,189,35,1*72 $GBGSV,5,3,17,24,16,43,,25,64,79,,32,38,311,,33,29,115,,1*7C $GBGSV,5,4,17,38,72,212,,39,52,250,42,41,77,67,,59,47,180,27,1*45 $GBGSV,5,5,17,60,16,251,38,,,,,,,,,,,,,1*4C $GBGSV,4,1,13,06,40,241,,08,76,278,,09,23,236,,13,66,294,,3*70 $GBGSV,4,2,13,16,41,241,,23,47,189,35,24,16,43,,25,64,79,,3*7C $GBGSV,4,3,13,32,38,311,,33,29,115,,38,72,212,,39,52,250,,3*73 $GBGSV,4,4,13,41,77,67,,,,,,,,,,,,,,3*72 $GBGSV,4,1,13,06,40,241,,08,76,278,,09,23,236,,13,66,294,,5*76 $GBGSV,4,2,13,16,41,241,,23,47,189,38,24,16,43,,25,64,79,,5*77 $GBGSV,4,3,13,32,38,311,,33,29,115,,38,72,212,,39,52,250,41,5*70 $GBGSV,4,4,13,41,77,67,,,,,,,,,,,,,,5*74 $GAGSV,2,1,8,02,25,159,,03,66,41,,05,21,84,,08,45,297,41,7*4C $GAGSV,2,2,8,13,31,287,43,15,28,226,,24,18,44,,25,41,98,,7*45 $GAGSV,2,1,8,02,25,159,,03,66,41,,05,21,84,,08,45,297,36,1*4A $GAGSV,2,2,8,13,31,287,42,15,28,226,41,24,18,44,,25,41,98,,1*47 $GIGSV,2,1,5,01,,,35,03,,,42,05,,,33,07,,,36,1*4E $GIGSV,2,2,5,10,39,195,29,,,,,,,,,,,,,1*75 $GNGNS,092305.00,3943.3526,N,14004.1925,E,NNNNNN,00,25.5,13347.0,0.0,,,V*2E $GNRMC,092305.00,V,3943.3526,N,14004.1925,E,38.8,321.4,160724,,,N,V*1F $GNVTG,321.4,T,,M,38.8,N,71.9,K,N*14 $GNZDA,092305.00,16,07,2024,,*71
プロットにはQGISでOpenStreetMapを使用(*゚ェ゚*)
中部国際空港セントレアから新千歳空港までの軌道(青が行きで赤が帰り)
各空港のアップ
Arduino UNO R4 WiFi で https接続してGETできない原因を探る
ArduinoのWiFiからHTTPS接続でデータをGETしたいと思いサンプルスケッチを元に自宅サーバーへ接続を試してみるも接続できない…(*´ェ`)
11:48:22.111 -> Starting connection to server...
11:48:22.375 ->
11:48:22.375 -> disconnecting from server.
サンプルスケッチのWiFiWebClientSSLをそのまま実行するとGETできることを確認した(*´ェ`)
- 自宅サーバーのアドレスに変えると繋がらないしGETできない。
- レンタルサーバーへ接続してみると繋がらない。
ルート証明書を設定しないと繋がらないようなのでルート証明書(自宅・レンタル共にLet’s Encrypt [ ISRG Root X1 ])をsetCACert()関数で設定して繋いでみるとレンタルサーバーへは繋がりGETできるけれども自宅サーバーへは繋がらない・・・(*´ェ`)
これはもうサーバーの設定の違いかなとApacheのSSLの設定を確認するとSSLProtocolにTLS 1.2を使用しないように指定していたので一旦使用できるように設定して接続確認してみると繋がった(*゚ェ゚*)
ArduinoはTLS 1.2で接続しようとしてできなかったのか…(*´ェ`)
TLS 1.3で接続するにはどうしたら良いのだろうか(*´ェ`)
ESP32-S3はTLS 1.3に対応しているみたいだしなんとかなるのかな(*゚ェ゚*)
TLS 1.2での接続を許可するかTLS 1.3で接続できるように調べるかどちらか…(*´ェ`)
Androidのファームウェアは 0.3.0 でも 0.4.1 でも同じ挙動だった(*´ェ`)
目指すはAndroidのファームウェア 0.4.1 で TLS 1.3 で接続∑(*゚ェ゚*)
続々・12桁の7セグメントLEDでIPv4を表示
IPv4表示機をどうやって残しておこうかな(*´ェ`)
ブレッドボードにそのまま置いておいてもいいかなと思ったけれども折角なので基盤化したい∑(*゚ェ゚*)
というわけで回路図の作成と基板のデザインをしてPCBの発注をしてみた∑(*゚ェ゚*)
KiCadというソフトを使って回路図の作成からガーバファイルの作成までを行った(*゚ェ゚*)
ブレッドボードで作っていた回路から変更した点はNOT2つとアナログスイッチを3つ追加したこと(*´ェ`)
回路図がこちら(*´ェ`)
基板デザインがこちら(*´ェ`)
OSL30301-LXのフットプリントが無かったので自作(*´ェ`)
というのが先週の土日の出来事で12日の夕方に発注して届いたのが18日の今日なので思っていたより早い∑(*゚ェ゚*)
黒色かっこいい…(*´ェ`)
部品はこんな感じ(*゚ェ゚*)
早速部品を実装して動作チェック ワク₍₍ (ง ˘ω˘ )ว ⁾⁾ワク
グゥ動いたぁ∑(*゚ェ゚*)
初めての回路図や基板のデザインを行なったけれどもすんなり発注まで出来て、さらにはんだのやり直しも無しで一発動作でびっくり感動(*゚ェ゚*)
今回IPv4の表示させるためのデータを送っているのは Arduino Uno R4 WiFi で固定値を使っている(*´ェ`)
今後はWiFiで外部に接続したりルーターに問い合わせたりしてグローバルIPを取得したりして表示させる予定(*´ェ`)
Raspberry Pi Pico W でも表示させてみたい ワク₍₍ (ง ˘ω˘ )ว ⁾⁾ワク
DIPパッケージをSOPやSOICに変えたりキャパシターや抵抗も表面実装にしてみたい(*゚ェ゚*)
続・12桁の7セグメントLEDでIPv4を表示
注文していた74HC154とDIPに変換するアダプターが届いたので先日作ったIPv4表示機で3to8デコーダを2つ使った箇所を4to16デコーダ1つに置き換えてみる(*´ェ`)
すんなり動いて配線もすくなった(*゚ェ゚*)
色も若干濃くなった気がする..(*´ェ`)
12桁の7セグメントLEDでIPv4を表示
3桁の7セグメントLEDを見た時に真っ先に思いついたのがIPv4を表示させること(*´ェ`)
というわけで早速3桁7セグメントLEDを4つ買ってIPv4を表示させてみた(*゚ェ゚*)
まずは1つだけで表示させてみる、これがダイナミック点灯と呼ばれる目の残像を利用した表示方法か(*゚ェ゚*)
目で見ると確かに高速で切り替えているように見えない∑(*゚ェ゚*)
なんとなくわかってきたところで4つの3桁7セグメントLEDを繋げてIPv4を表示させてみる(*´ェ`)
シフトレジスタを使ってArduinoとの配線は3本の信号線で済んだ(*´ェ`)
IPの表示はシフトレジスタにIPアドレス1桁の数字と4つのオクテット(3桁7セグメントLED)のうちどれかという位置と、どの桁かという情報を1byteで送っている
例えば1つ目のオクテット(一番左の3桁7セグメントLED)の2桁目は9という数字の場合
00011001 という8bit 1byte分のデータを送る
左から 2bit は 4つのオクテットのうちどれかという位置(1つ目)
次の 2bit は 3桁のうち何桁目か(2桁目)
次の 4bit は 表示したい数字(9)
00 01 1001
となっている(*´ェ`)
7セグメントLED周りの配線が悲しいけれども表示はできた(*゚ェ゚*)
今回は指定したIPを表示させている(*´ェ`)
いずれネットワークからグローバルIPなどを取得させたい(*゚ェ゚*)
最初はチラついていたのでバイパスコンデンサをICの近くに設置したらチラつかなくなって感動した(*゚ェ゚*)
12桁だとちょっと発色が弱いような色が薄い..(*´ェ`)
別の電源からトランジスタを使って増幅させる必要がある?
と思っていたけれど一旦今の回路で使用しているICを減らせそうと気がついたので減らしてみた(*゚ェ゚*)
2to4デコーダとインバータ(NOT)x2、NANDx3を1つのIC 4to16デコーダ(74xx154)でできそうだ∑(*゚ェ゚*)
だがしかし74xx154のDIPが売り切れ..(*´ェ`)生産終了..(*´ェ`)悲しい
SOICの74HC154はあるのでDIPに変換するアダプターと共に注文(*゚ェ゚*)
届くまで4to16デコーダを3to8デコーダ(74xx138)2つ使って置き換えてみることにした(*゚ェ゚*)機能的には同じ(*´ェ`)
だいぶスッキリした∑(*゚ェ゚*)
あら少し色が濃くなった∑(*゚ェ゚*)
SONY SPRESENSE で取得したNMEAセンテンスをシリアル通信で他の端末へ流す
やってみたかった事ができた(*゚ェ゚*)
先日作った SONY SPRESENSE で取得したNMEAセンテンスのデータをシリアル通信で Arduino に繋いだディスプレイに表示させるから発展させて複数のArduino端末へデータを送り各端末でデータを加工し表示させたかったのだ(*´ェ`)
SONY SPRESENSE はNMEAセンテンスをシリアル接続で送るだけ(*゚ェ゚*)
受け取る側のArduinoはそれぞれ表示に必要NMEAセンテンスを取捨選択する(*´ェ`)
一つ目のArduinoは$xxGSV をフォーマットして衛星の位置を表示させて、二つ目のArduinoは$xxZDA をフォーマットして日時の表示をさせている(*´ェ`)
Arduino と LCD の AE-ATOM0130B3
Arduino R4 Minima を追加で1つ買ってしまった(*´ェ`)
今日は先日買った3つのLCDのAE-ATM0130B3を繋いでみる(*゚ェ゚*)
解像度が240pixel × 240pixel なので図が表示できそうだなと触っているとGNSSロガーで取得したNMEAセンテンスのうちGSVのビューアーに使えるのでは思ったので作ってみることにした(*´ェ`)
なんだかいい感じに作れそう(*゚ェ゚*)
なんだかいい感じに作れそう(*゚ェ゚*)
NMEAセンテンス(GSV)に含まれる1番目の要素 $xxGSV のxx部分で色分けをしたり、衛星番号と組み合わせて辞書のキーにしてみたりした(*´ェ`)
シリアル通信でGSVデータが送られてくる度にデータと表示を更新しているのでデータだけは更新して表示は5秒に1回再描画するくらいがいいのかもしれない(*゚ェ゚*)
SONY SPRESENSE で作成したGNSSロガーからシリアル通信でNMEAセンテンスを垂れ流しにして各センテンスごとのビューアにデータを表示させることができそう(*´ェ`)
Arduino と LCD の M96-16-SSD1306
昨日は Arduino と LCD(AE-AQM1602A) の接続&文字表示が思っていたより簡単に出来ることがわかったので今日は別のLCD(M96-16-SSD1306)を使って文字を表示させてみた(*´ェ`)
昨日のLCDは16文字の2行を表示できたけれど今日のLCDは16文字4行表示できる(*゚ェ゚*)
読みやすさは置いておいて、文字が小さくて文字間が詰まっていてカッコいい(*´ェ`)白文字も良い(*´ェ`)
サンプルのスケッチでビットマップ画像や線や図形などを表示させることもできた(*゚ェ゚*)ドットの描画も出来ていたので文字以外で何か描画させてみたいな(*´ェ`)