2022/08/06
ADコンバータ | |
入力端子 | ADC1(8ch) : GPIO32-39 ADC2(10ch): GPIO0,2,4,GPIO12-15,GOIO25-GPIO27 GOIO25はGPIOの間違いか? GPIO0,2,15はストラップピンだから自由に使えない。WROVERは0,2,4,15が外部で使用中。 ADC2モジュールはWiFiでも使うので、ADC2には制限がある。 |
基準電圧 | 1.1V(内蔵) 精度はどのくらいか? 個体差はどこかで修正できるのか? 基準電圧は1000[mV]から1200[mV]にばらつくそうだ。 |
測定範囲 | 入力0〜1[V]程度 入力が1Vを超えるときはADC Attenuationを設定 ADC_ATTEN_DB_0 100mV-950mV ADC_ATTEN_DB_2_5 100mV-1250mV ADC_ATTEN_DB_6 150mV-1750mV ADC_ATTEN_DB_11 150mV-2450mV なんだろうこの半端な11dBは? アッテネータをつけるのはいいが、アッテネータを11dBにすると非線形性がでてくるとか。 |
分解能 | 12bit ハードウェア上は9-12bitに設定可能 |
直線性・誤差 | DNL(微分非線形誤差) -7〜+7LSB, INL(積分非線形誤差)-12〜+12LSB 測定条件 WiFi,Blootooth OFF Missing Codeが発生するし(下位3ビットはあてにならない?)、変換特性自体に12LSBの誤差(3.6ビット相当)、分解能12ビットと言っているが実質8ビットじゃないのか? 100mV未満は0,オフセットがある。入力1[V]で飽和? 基準電圧未満でフルビット0xFFFになるのか? |
変換レート(Max) | RTC controller 200ksps(5uS) DIG controller 2Msps(500nS) |
入力インピーダンス |
ESP-WROOM-02 Datasheetには記載なし。 Electrical CharacteristicsにLogical levelとWi-Fi Radioはあるがアナログ的なことは記載がない。(この会社、電気の基礎ができていないのでは?) |
ESP32 Series Datasheetより
![]() ![]() ESP-IDE Programming Guideより ![]() 「基準電圧は1100mVだけど、個体差があるよ」ってどういうことよ? しかも、0[V]付近は不感地帯があるし。 |
ESP32-WROOM-32EにはGPIO37,38がない。 GPIO0,13,21,22,TXD0,RXD0はすでに使用中
|
ソフトウェア | |
どのレジスタに何をセットすればよい? | スケッチ例を参考にする。どこかのスケッチを参照する。 |
AD変換関数はあるのか? | スケッチ例にあるのでは? 多チャンネル化できるのか? |
スケッチ例 AnalogRead.ino | kohacraftのblog ESP32のADCでキャリブレーションされた精度の良い電圧値を取得する方法より抜粋 |
"pin 2"とあるが、GPIO2だろうか? 流石に2番ピン(EN)はないよな。それともどこかの製品のピン番号だろうか? DHT20のときも困ったが、「ピン番号」なのか「GPIO番号」なのか明示してほしい。 (基本はGPIOなのだろうか?) アッテネータの設定が記載されていない。 デフォルトのままで使うのならよいが、どうだろうか? pinModeの設定がないけど、このスケッチ例大丈夫なのか? |
#define AD_PIN 34 #define N 2000 void setup() { Serial.begin(115200); delay(100); analogSetAttenuation(ADC_6db); //ATT -6dB pinMode(AD_PIN, ANALOG); } void loop() { long adMillivoltTemp = 0; for ( int i = 0 ; i < N ; i++ ) { adMillivoltTemp += (long)analogReadMilliVolts(AD_PIN); } float adMillivolt = (float)((double)adMillivoltTemp / (double)N); //mV Average Serial.printf("%d[mV]\n", (int)(adMillivolt+0.5) ); }アッテネータを6dBに設定している。非線形性の問題があるので、これがよいかもしれない。 |
![]() |
![]() |
![]() |
WiFi.disconnect(true);//disconnect(),disconnect(false)はダメらしい .... WiFi.begin(ssid,password);//WiFiに再接続
conn.execute(sql); conn.close(); WiFi.disconnect(true);のように連続して処理をすると、データがデータベースに記録されないときがある。記録されるときもある。
conn.execute(sql); delay(xxxx); conn.close(); WiFi.disconnect(true);のようにconn.execute(sql)を実行した後、conn.state()を確認したが、0(no error)だった。 直ちにconn.close()を実行すると、conn.exe()が実行途中でデータベースを切断することになり、データが記録されない。
ps aux|grep postgres