Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

開発環境の準備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

azusa9
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした