2024年7月17日水曜日

ESP32C3のシリアルに悩む


AnalogDiscovery2とオシロまで引っ張り出して

 ほぼ愚痴です……

ESP32C3でGNSSとLTE modem同時接続が動かなくて半日ツブしました。

結局原因はわからないんだけども……昨日テストしまくって切り分けしてSoftwareSerialとHardware Serialをわざと入れ替えてビットレートも変えて……いろいろやったんだけど動かなかったのに、今朝試したら動いてしまい。

原因がわからない……。

考えられるのは、ATコマンドデバイスは電源投入後最初のAT<CR>で通信速度の設定をしている、という仕様があったと思います。つなぎ替えたりしたときのノイズで変なボーレートに設定されてしまい、それでAT<CR>OK<CR>が帰ってこなかったんじゃないか?という説。

今朝電源を入れ直したらからまた初期化されてデフォルト値の115200で叩いたら反応して現在に至る。

ただ、これは昔の「ピーガーモジョモジョジョ」な時代のモデムの話で今時のLTEモデムにも通用するんですかね。

gitでhistoryみても試行錯誤の過程で間違った設定はしていないし……これぐらいしか思い当たりません。

ほぼ愚痴ですが……時間潰してくやしいので書きました。

速度の速いLTEモデムはHardwareSerialのSerial1、遅めのGNSSはSoftwareSerialで動かしています。

2024年6月6日木曜日

ADT7410の奇妙な現象

I2C接続の16bit温度センサーADT7410をわりとノイズ激しい環境で2個使っている(近くに10W程度のDCブラシモーターがぶんぶん)。CPU基板から10cm、センサー基板上に5cmぐらいの配線。

1分間隔での測定するとCPUから遠い方だけ数度高い温度が記録されてしまう。

ノイズ源を止めると最初の2-3回高い値が出るけど次第に収束する。continuousモードで計測しているのでI2Cでのデータの取得とは関係なく内部では計測しているはずなんだけども、止めたあとの時間間隔に関係ない2-3回は高い値が出てしまう。continuous以外のモードでも違いは感じられない……。

……なんでしょうねー。

表からみえる現象から判断すると、通信エラーではなくIC内部にノイズが直接影響しているような感じなんですが……。

Ni-MHを使ったUPS基板なんですが、サーミスタにしておけば良かったかなぁ……。

2024年6月4日火曜日

Raspberry pi(master)とESP32(slave)のI2C通信

まず基本的なこと。ESP32のWireはずっとslaveにならず外部のライブラリを使う必要があったけど、いつの間にかマージされたんですねー。普通のArduinoと同じようにWire.begin(Slave Address, SDA, SCL, Clock);と書けばスレーブとして動作します。

さて、Rapberry Piの3番ピンとXIAO S3のD0、5番ピンとD1、GNDと6番ピン とを接続して、Raspberry Piのraspi-configでI2Cを有効にし、i2cdetect -y 1<Enter>と押せばXIAOのスレーブアドレスが表示され……ません。

しばらく悩みましたが、ESP32側でI2Cクロック周波数を100000に設定してRaspberry Piの標準I2C速度に合わせたところ、無事通信できました。

……速度を自動的にあわせてくれるセンサーなどのI2Cデバイスって偉いですね ^ ^;


■余談:今日も朝からハマりまくりでした■

XIAO S3がどうも自動書き込みできなくなってBOOTボタン(ちっこい)とResetボタン(ちっこい)で強制的に書き込みモードにしていたんですが……Serial.beginの後にdelay(5000)を入れたら問題なく動くようになりまして。

while( !Serial ); を入れればいいんですかね。でも、これ入れると装置に組み込んでシリアルつながない状態だと永遠に起動しないんですよね(XIAO RP2040の場合……S3, C3などでは試してない←試せ←試します)。

whileに真面目にタイムアウトとか組み込んだ状態で対応すべきなんですが……そうすると組み込みの顧客から「起動が遅い!」って怒られてどうすりゃいいのさ思案橋(古い)。

--

次にハマったのはESP32でのサーボ制御。せっかくビット数の多いPWMがあるんだから真面目にPWMのリロードなどを書けば良い精度で複数chの50Hz PWM制御できると思うんですが、なかなか良いライブラリがありません……オシロで見ていると複数のサーボを同時に動かすだけでパルス幅がメロメロになっちゃう。

今回使いたいのは2chだけなので自分で書くか……とも思ったのですが、AVRなArduinoでしか動かないけどやけに滑らかに動くので、それ使うことにしました。ライセンスがGPLだけど顧客の承認も取れましたし。高い高い純正のArduino nanoも買いました。とりあえずティーチングした通りにサーボ2個を動かす必要があるので、学習データはI2C EEPROMに書き込むことにします。

I2C EEPROMの追加は10分で終わるけど、サーボの処理は10分じゃ書けない!

実作業よりハマっている時間の方が長いんですよね……。

2024年5月31日金曜日

DFPlayer proでまたハマる……

もし認識違いがあったら突っ込んでいただければ幸いです。

  • やっぱり電源は3.3Vだと駄目
    • miniと同様に3.3Vだとちゃんと動いてくれない。
    • 5Vにすると動く。ただ5Vを給電すると、miniと違ってTxに3.7Vぐらい出てきちゃうので下手な3.3V系マイコンをつなげない(マイコン破損の可能性)。
    • とりあえず、電源を5Vに接続し、Txを2.7k + 4.7kにつないで中間点から取り出した信号をESP32に入れることで動作することを確認しました。

  • ファイル削除すると駄目
    • DFPlayer miniはSD Cardが必要ですが、proはUSB TypeCでPCと接続すると直接USBメモリーとしてマウントされます。
    • それは良いのですが……ファイルを削除したり上書きするとダメになります。連続再生しながらファイル名を表示していて気づいたのですが、消したはずのファイルが一覧に現れてます。
    • 対策としては、
      1. 中のファイルをどこか保存
      2. UBSとしてマウントされたドライブをフォーマットする
      3. ファイルをコピーする
      4. アンマウントする

そんな感じです。ああしんど……。あ、ファイルの追加は大丈夫です。

2024年4月13日土曜日

M5Stack Core2 + バッテリーボトム

Core2のタッチパネルを使いたい+BasicのGPIO使いたい、ということでバッテリーボトムを組み合わせてみました。

Core2の底の4本のネジを外し(M2トルクス)、垂直に引っ張ると底のカバーが外れます。

バッテリーボトムは2本のネジ穴しかないし、外したネジは届きません……ボトムの厚さが違うので仕方ないですが、ネジの長さの許容範囲が狭いので、さてどうやって調達したものか……。

M5Stackは内部で使っているGPIOも外に出す方針。Core2はBasicより更に内部仕様が多いので、外で使える信号が少ないんですよね。

いつもお世話になっておりますlang-ship様の「M5Stack Core2のGPIO調査」によれば、13,14,19,25,26,27、あとGroveのところに32,33が出ている、とのこと。

ただ、M-BUSの配置が変わっているので(M5Stackさんのこういう行き当たりばったりな体質……10年使えるバスを考えていて製品が出ないより良いのでしょうね)、読み替えないといけません。

まぁ、ESP32自体、使えるGPIOが少ないのでしょうがないですね……。

で、pimodeをoutputにしてdigitalWriteでHIGH/LOWするという極めて原始的なプログラムで検証した結果、以下のGPIOが使えそうです。左がプログラム上のGPIO番号、右がBattery Bottomでの名称です。

13 -> 16
25 -> 25
26 -> 26
14 -> 17

おお、全部(後ろから見て)左側に並んでいる!ありがたや!!

なお、この他、入力のみ使えるピンとGroveで使えるピンがありますが、検証していません。また後日←(うん、いけたら行く

入力のみ使えるピンは35,36ですが、これはBasicでもCore2でもM-BUS上での配置が同じなので、そのまま使えるんじゃないかと思います。

筐体設計……

設計なんてだいそれたことじゃなくて……穴開け指示図面を書いて、業者さんに齟齬なく依頼できれば良いんですが……

今回、Fusion 360で、

各面(天板・底板・前面・後面)にスケッチを作って穴位置を指定する

ってやったんですが、終わってから気づいたんですよね。

1. スケッチで底面の長方形を描く
2. 直方体にする
3. 穴開けの必要な面をスケッチにして、穴加工を描く

この方が楽だったな、って……。

出来上がったのが上の画像です。板金屋さんへの説明のために底板だけ1.5mm厚さのボディを作ってあります。あと天板の加工は省略です。

こんな感じの「3Dツールで書いたけどやっぱりポンチ絵」な雑な図面で、きっっちりきれいなケースを作ってくださる星製作所こと「板金ケース.com」さん、ありがとうございます!

今回は時間がなくて鉄+塗装なんですが、アルミ+アルマイトとか鉄・ニッケルメッキがきれいなんですよね。



2024年4月11日木曜日

ポゴピンの台、作りました。



作った基板の検査用に基板裏から接続して計測などする必要が生じたのでDIP 8の形に生えたポゴピン探したんですが……ないですね。

なので作りました。

最初ユニバーサル基板重ねて動かないように固定してからはんだ付けすれば楽勝じゃね?って思ったんですが、ユニバーサル基板の穴は0.8mmぐらい。今回使う「凹」型のポゴピンは太さ1.3mmなので通らない。

基板を起こそうかとも思ったんですが、時間もないのでとりあえず絶縁した台を作ってワイヤ引っ張り出しました。

1. 3Dプリント→ピンバイスで穴加工

FDMで穴のサイズをいくつか変えて出力したんですが……ダメダメでした。最近うちのSnapmakerさんご機嫌ななめで、ノズルを交換しないと駄目な感じです。

SLAプリントなら精度出るんですが、いま手荒れがひどくて使用禁止。

ということで、ピンバイスで1.5mmに穴を広げました。PLA硬いけど、なんとかOK。

2. はんだ付け

ポゴピンを台に通してから導線をはんだ付けします。ゆっくりはんだ付けしていると台が溶けるのでご注意を。はんだ付け不要のタイプなどもありますが、今回、在庫の都合ではんだ付けしました。

3. ポゴピン通していい感じに仮接着

この項目の作業はSLAで精度良く出力したら不要かも。

作業用のジグを出力しました。ポゴピンが同じ長さになるように、ポゴピンを通してひっくり返した「台」が作業台と水平になるように保つジグです。

ポゴピンを穴に通してから、台をひっくり返した状態で上記ジグにはめ込んで、ポゴピンがみんな平行かつ垂直になっているのを確認してから、ホットグルーを垂らして動かない程度に固定します。

ホットグルーが温かいうちに水平垂直を確認しまくります……冷える時の「ヒケ」で動いたりしますので。

4. ホットグルー増量→再融解

ホットグルーを積み増しします。1回で乗せるとヒケやらで台無しになりますので、2-3回に分けて盛ると良いかと思います。

分けて盛ると、ホットグルーが汚くなりがちですが、そのときには手芸用のヒートガンでゆっくり温めます。するとグルーがいい感じに溶けて、滑らかかつ均一になります。糸引きなんかもキレイに溶けて一体化するのでグルーガン下手な方(遺憾ながら私だ)はぜひ。


いやー……大変でした。買うと高いわけですね。

でもDIPの「肩」に針立てるやつなんかを作っておくと楽だろうなぁ。あとポゴピン通すユニバーサル基板こんど作ろう。

2024年1月21日日曜日

E220-900T22 + EByte Lora E220 Library + ESP32

世間様のブログなどを見ているとみなさん簡単に動かしているんですが……原因確定するまで半日潰しました。とほほ……

ライブラリ、各種使いましたが、最終的にうまくいったのは表記の「EByte E220 Library」です。これのソースに書いてある配線でOKです。AUX, M0, M1についてはどのGPIOでもOKですし、Serial2についてもアサインを変えれば動きます。ESP32だとSoftwareSerialは面倒くさいので使いません。Hardware Serialで良いのです(強意)。

// 何があった>くらはし

私の場合はE220 : ESP32の配線を

M0 : 26
M1 : 27
RX : 17
TX : 16
AUX : 25
Vcc : 3V3
GND : GND

としました。これにあわせてピン設定を書き換えます。

さて、EByte E220 Libraryはよくできています。

ただ、そのままでは通信できないんじゃないかと思います。各通信モードに合わせた設定が必要ですが、各通信サンプルには設定を変更する機能が組み込まれていません。

02_setConfigurationという設定書込プログラムがありますが、そこに各送信モードでの初期設定が用意されコメントアウトされています。使いたい通信モードの設定のところのコメントを外して実行してE220に対して書き込み、それから使いたい通信モードのプログラムを実行します。

たとえば、04_sendFixedTransmissionというプログラムを実行する場合には、あらかじめ02_setConfigurationの"FIXED SENDER"とあるブロックを有効にして設定を書き込んでおくか、これに関連する処理を04_sendFixedTransmissionに移植して実行する必要があります。

あと、もう一つの落とし穴としては、通常の通信プログラムだと送信アドレスと受信アドレスを設定しておき、相手側のアドレスを指定すると送れるのですが……LoRaの特性なのかライブラリの特性なのか、送信側のアドレスと、受信側のアドレスが一致していないとデータ送信ができません。

一種のペアとして動く仕様なんですかね……?

まぁ……わかってしまえば簡単です。LoRaで長距離通信を楽しみましょう!

余談ですが、各種ブログを見ると、見通し距離なら数十Km届くみたいですが、影になるとガタ落ちみたいですね……最近の無線は2.4Ghzなどが当たり前なので、それに比べればLoRaの400とか900MHzは「回り込める」と言われるんですが……私ら古いアマチュア無線屋からみると900MHzなんて光と変わらないワイ、という印象です ^ ^

2023年12月30日土曜日

2023年買ってよかったもの

安定化電源TEXIO PPX20-5

直流電源装置はいままでRIGOL DP831Aを使っていました。まぁ直流電源装置としてはごく普通の機種だと思います。

ただ、UPSなどを開発していると電池の評価が不可欠で、そのためには記録機能が重要です。残念ながらDP831Aの記録機能は余り充実しているとはいえません。

そこでテクシオに相談してみたところ、提案されたのがPPXです。

USBメモリに明示的に記録、uA単位まで計測、1秒以下でのサンプリングも可能、熱電対(フロントパネルに差込口がある)と同時に記録可能、など電池の評価にうってつけです。



スジボリ堂さんの「【量産型】BMCタガネ 幅0.50mm

プラモデルの仕上げにつかうタガネです。彫刻刀の平刀みたいなやつ、ただし幅が0.5mmです。

これまでプリント基板のパターンをカットする時にはデザインナイフを使っていたのですが、パターンに比べて刃が大きいので隣接するパターンやレジストに傷を付けないためにかなり神経を使いました。

でも、BMCタガネは弊社プリント基板の標準配線0.4mmとほぼ同じ幅! 

その威力はこちらの動画をご覧ください ^ ^ 動画では少し強く切りすぎですが、初めてなので許してください。なにせ初めてなのに一発で成功するほど使いやすいのです!



微弱電流レンジのある交流/直流クランプメーターMT-119

クランプメーターといえば交流でアンペア単位のもの、というイメージだったのですが、これは直流対応でしかもミリアンペアから計測できます。精度はそれなりですが、でも「動作中のものを止めたくないけど、電流どのぐらい流れているんだこれ」っていう状況でサクッと電流をしることができるのはとてもありがたいです。

また今年は交流電流案件も多かったのですが、そっちでも自分の作ったカレントトランスとの比較ができて、助かりました。


DMM インステック GDM-8342

今までずっとハンディ型のテスター / DMMで生きてきましたが、デモを見て据え置き型を買いました。抵抗値がパッと表示される! レンジをガチャガチャ切り替えなくて良い!! ってのは据え置き型DMMに共通の特徴ですね。


三和電気計器 テストリード TL-A7M2

テスターリードにかぶせるとブレッドボードにそのまま刺さる細いピンに変換できます。ブレッドボードの他にXHや5051や丸ピンのICソケットにそのまま刺すことができます。

……という製品はこれまでもありましたが、この製品の良いところは形状記憶合金製だということです。細いピンがひん曲がってもヒートガンで炙るとまっすぐ元に戻ります。



今年作ったもの(JLCPCB発注履歴) - 2023年

今年一年お世話になりました。2023年の実績です。JLCPCBへの発注履歴をベースにしているのでユニバーサル基板だけで終わったものや忘れているものもあります……。

見事に受託ばっかりです。おかげさまで売上はハードウェア中心に切り替えて以来、初めて大台に乗りましたけども……来年はもっと自社製品を増やしたいと思います。

って毎年言ってますが……。

電池駆動で待機電流減らしまくった回路、ESP32C3/S3、省エネマイコンMSP430、NiMHを使ったUPS、ニキシー管時計……そのへんでいろいろやりたいです。

来年もどうぞよろしくお願い致します!

■一覧■

カレントトランスからの入力をESP32で飛ばす基板(設計〜試作:B2B)

美容機器のプロトタイプを3Dプリント(設計〜試作:B2B)

ESP32で気温湿度ダストカウンターSPS30のデータを送信する基板実装(設計〜試作:B2B)

Spresenseと距離センサーを接続するレベル変換基板(設計〜実装:クラウドワークス)

STM32実装手配案件(手配:B2B)

廃業した会社のCNC装置の基板をリバースエンジニアリング(設計〜製作:ココナラ)

電池駆動でESP32から気温と湿度データを送信する省エネ基板(設計〜量産:B2B)

電池駆動でESP32から熱電対から取得したデータを送信する省エネ基板(同上)

Spresense+LTE+カメラで無人撮影局用MSP430ベースのUPS基板(設計〜製作:クラウドワークス)

ESP32でのモーター/ヒーター制御・監視基板(設計〜製作〜量産支援:ココナラ)

CH552でのチューインガムサイズのLi-ion電池付USB充電型LEDライト基板(設計〜試作:クラウドワークス)

Raspberry Pi用信号レベル変換アダプタ基板(設計〜試作:B2B)

ゴルフ練習機用Ni-MH対応UPS基板(設計〜製作〜量産:クラウドワークス)

Ni-MH電池用環境温度・電池表面温度計測基板(設計〜製作〜量産:クラウドワークス)

FPC変換基板(設計〜試作〜量産:B2B)

幼稚園バス閉じ込め防止用デバイスおよび電池監視デバイス(設計〜試作:ココナラ)

Xbee変換基板(設計〜試作〜量産支援:B2B)