LoginSignup
53

More than 5 years have passed since last update.

ちょと裏技っぽいけど、ESP8266 でAD変換やる方法

Last updated at Posted at 2015-07-16

開発環境の準備WiFiの接続まで、出来たところでいきなりAD変換に行ってみたいと思います。

ESP8266でのAD変換(概要)

ESP8266にはTOUTピンがあり、コレがAD変換できる唯一のピンのようです。
このピンは仕様書を読む限り、「電源電圧の測定」もしくは、「外部の適当な電圧の測定」が行える様です。
(英語に自信が無いので、間違っていたらゴメンなさい)

今回は、「外部の適当な電圧」の測定をやってみます。
注意点が一つあります!
TOUTピンを使ったAD変換は、0v~1Vの範囲で10bitの分解能を持って計測する事ができるとのこと

1V以上の電圧を入れると壊れるのかは試していませんが、電圧の計算ご注意下さい。
あと、今の所AD変換はArduinoっぽく使えないので、プログラムの所よく読んで下さい。

簡単な回路図

しょぼいですが、手書きの回路図です。抵抗で3.3Vの電源電圧を分圧しているだけですが・・
DSC_1332-2.jpg

 
DSC_1329.JPG
DSC_1330.JPG

プログラム

本来は、Arduinoっぽく、アナログリードと書きたいところですが今の時点では、アナログリードは実装されていない様子で上手く動きませんでした。
そこで、色々調べたら次のコードを使うと上手く動きました。
 

extern "C" {
#include "user_interface.h"
}

プログラムの始めESPのヘッダーファイルを読み込んでいる所に上記の記述を追加します。
 

system_adc_read()

そして、AD変換をするのはこの関数で出来るらしいです。
 

前回のWiFiのプログラムに書き足すと下記になります。

QiitaWiFi02
#include <ESP8266WiFi.h>
extern "C" {
#include "user_interface.h"
}

char toSSID[] = "XXXXXXX";
char ssidPASSWD[] = "YYYYYYYYYY";

void setup() {
  //デバッグ用にシリアルを開く
  Serial.begin(115200);
  Serial.println("PG start");

  //WiFiに繋がったらLEDを点灯させるので、そのピンをOUTPUTに設定して、LOWに。
  pinMode(5, OUTPUT);
  digitalWrite(5, LOW);

  //WiFiクライアントモード設定
  WiFi.mode(WIFI_STA);

  //WiFiを繋ぐ前に、WiFi状態をシリアルに出力
  WiFi.printDiag(Serial);

  //WiFiの設定を入れる。IPは、デフォルトがDHCPのようで、IPが共有されるときはWiFiのアクセス情報だけでOK
  WiFi.begin(toSSID, ssidPASSWD);

  // 固定IPではネットワークステータスが上手く動かないので、今は使えなさそう。本家にバグ登録はされているらしい。
  //  WiFi.config(ip, gateway, subnet);

  //接続が確立するまで、・・・を表示
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");

    //WiFi.printDiag(Serial);

  }

  //ここに来たら、接続完了している。

  //改行して繋がったことをシリアルで伝える。
  Serial.println("");
  Serial.println("WiFi connected");

  //WiFiの状態を表示
  WiFi.printDiag(Serial);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  // 無線LAN接続OK LED点灯
  digitalWrite(5, HIGH);


}

void loop() {

  //unsigned int 型の入れ物を用意
  uint ADC_Value = 0;

  //AD変換実行
  ADC_Value = system_adc_read();

  //計測結果をシリアルに書き出す。0-1024の値
  Serial.println("=======ANALOG " + String(ADC_Value) + "ANALOG ");


  if (WiFi.status() != WL_CONNECTED) {
    // コネクション確立済み以外のステータスなので
    // 無線LAN接続NG LED消灯
    digitalWrite(5, LOW);
  } else {
    //コネクションOKなので、点灯
    digitalWrite(5, HIGH );
  }

  delay(500);

}

このプログラムを実行すると、こんな感じにシリアルにAD変換した値が流れてきます。
analog-read.jpg

電源の電圧を測るコマンドは何か調べられていませんが、分かったらこの記事に書き足したいと思います。

次にやろうと思っている事

ESP8266の真骨頂?! ディープスリープモードへ突入する仕方、復帰するやり方
です。お楽しみに~

またハマりどころを、下記に順次まとめています。あわせてこちらもご覧下さい。(随時更新中なので、ストックしてもらえれば更新時に通知させてもらいます)
http://qiita.com/azusa9/items/fe20794aa858a73fd97b

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
53