PICでは幾度もお世話になっているPWMだが、ArduinoでPWMを使ったことは無い。
もちろんESP8266でPWMを使ったことも無い。
ここまでESP8266を使ってみた経験から言えば、Arduinoと同じように書けば思ったとおりに動いているので、今回も同じように書いてみる。
そうは言っても、そもそもArduinoでの書き方を知らない。
Arduino PWM で検索すると先頭に「Arduino 日本語リファレンス」というサイトが出てきて(たぶんここの和訳https://www.arduino.cc/en/Reference/AnalogWrite)。
Arduinoでの書き方が説明されている。
ここで分かったことは、
analogWrite(pin, value);と書くこと。
valueには0~255を指定すること。
ATmega328の載るArduinoボードでは、デジタルピン3, 5, 6, 9, 10,11で使えること。
などだ。
その後、書き方はESP8266でも同様だが、値が0~1023だということが判明した。
参考にしたのはここだが、PWMに関してはたったの2行しか書いてない。
使えるピンについては0~15と書かれている。
これより前に、Lチカで遊んでいて、GPIO12とGPIO14にLEDがつないであったので、四の五の考えずにそのままやってみた。
他のピンは試していないが、少なくともこの2本は使えるようだ。
ロジックアナライザで実測してみると、周期は1msのようだ。
この周期はどうやって変更するんだろう。
上のサイトには「PWM信号の周波数は約490Hzです。」としか書かれていない。
490Hzでなく1kHzなのは明らかだが、これで固定なのかな?
とりあえず先にデューティ比を試してみるべくvalueを500に設定してみると、Highの部分の長さが490usだった。
1004us / 1024 x 500 = 490us
なので、こちらは計算どおりのデューティ比で出力されている。
ESP8266関連記事一覧へ