最近の投稿
最近のコメント
表示回数の多いページ

Posts Tagged ‘ESP-WROOM-02’

農家の皆さんのたいへんさをちょっとだけ体験!みかん栽培プロジェクト始動!

地方を代表する産業である農業。。

みんな必要不可欠な産業であるにもかかわらず、大変な仕事なだけに後継者がいないなどの問題で、産業は縮小してしまっているのは確かなこと。

これによって自国での自給率も下がっちゃって近未来のニッポン農業はどうなっちゃうのか心配になっちゃいます。

これをなんとかせにゃいかんとは思うモノの、農業を経験したこともないので、本当の苦労なんてわかるはずもない。。。

 

ならばちょっとだけでもその苦労を味わってみようやないか!というモチベーションのもと、大好きなミカンの栽培を始めてみました。。



せっかくならば、ちょっと今風に、その生育状態をRaspberry piとWebカメラを使ってライブ配信でもしちゃいましょうということで配信環境を作ってみました。。

まぁ、ちょっと見てやってください。。

育っていく様は、子どもを育てているのと同じような感じ。。

秋が楽しみです。。

 

今年は超酷暑!

農家のみなさんがんばってー




【我が家のみかん栽培プロジェクト リアルタイムライブカメラ】

http://www.norisuke.click/mikan-proj2.html

 

リアルタイムなので夜は真っ暗です。

ついでに、周辺環境の状態(温度、湿度、大気圧、照度)もESP8266にセンサーつないで測ってグラフにしてます。

 

まぁみてやってください


Pocket

IoT支える有望なデバイスを使って今度は、ESP-WROOM-02を使ってさらに、MCP3208でAD変換をして多くのアナログデータを制御してみた!

前回、ESP8266のnodemcpバージョンを使って、ソーラーパネルで発電してバッテリーに蓄電する電圧ロガーを作ってみましたが。。。

今回は、また新たにESP8266のESP-WROOM-02バージョンを使って、前回のバッテリー電圧だけじゃなくて、ソーラーパネルの発電量とソーラーパネル周辺の明るさをデーター化できるように新たに作ってみました。。。

 

ESP8266はすでにご存じの通り、アナログ入力のポートは1個しかなくて、アナログセンサーなどを複数つなぐのはちょっと面倒なことをしなけりゃいかんかったんですよね。。。

そんならデジタルデバイスを使えばええやんというご意見が聞こえてきそうですけど、アナログデバイスは、価格が安いとか、回路が簡単いうメリットがあるし、なにより、”味のある数値”(なんじゃそりゃ!)が出るということもあり結構すきなんですよねー!

 

ということもあり、ESP8266で使えるアナログポートを増やして、たんまり、アナログな味に浸れるバージョンを前回の発展形として作ってみました。。

 

今回は、前回3つ入手したうちの2つ目の種類である、ESP-WROOM-02を使ってみます。

今回は、アナログ入力が3つ必要となるので、ESP8266とMCP3208というADコンバーターをSPIで繋いで、アナログポートを増やして作ります。。

 

これは、前回使用した、nodemcpバージョンのように、USBシリアルやら、レギュレータやらは一切なくて、単にチップだけで構成されています。

なので、単純にプログラムを書き込むだけでも、それなりのUSBシリアルを介した回路を組んでやる必要があるんですよね。。

 

詳しくは、ESP8266 書き込み でググってみてください。。

 

まぁ、ネットの情報を元に作ってみたのがこんな感じ。。。

上のブレッドボードのヤツが今回作ってみたやつ!

(下は前回製作した、nodemcuバージョンのやつですな。)

 

右上の青い変な形をしている基盤に乗っかってるのが、ESP-WROOM-02

 

その下のちょっと小さな基盤が、USBシリアルコンバーター

 

こんな感じ。。。

 

 

ブレッドボードのちょうど中心にあるのが、ADコンバーターのMCP3208

こんな感じ。。

まぁフツーのICの形なんで、見た目わかりません。。。

このADコンバーターは8ch分のアナログ入力が可能で、12bitの分解能力がある優れもの!

でも300円弱なんでコストパフォーマンスは高いですな。

 

これに、0chには、バッテリーの端子間電圧

1chには、ソーラーパネルの電圧

2chには、CDSを付けて、明るさを数値化していることにしてみました。。

 

っで、肝心かなめのプログラムは。。。

<br />
extern &quot;C&quot;{<br />
 #include &lt;spi.h&gt;<br />
 #include &lt;spi_register.h&gt;<br />
 }<br />
 #include &lt;ESP8266WiFi.h&gt;<br />
 #include &lt;ESP8266HTTPClient.h&gt;&lt;/pre&gt;<br />
char ssid[] = &quot;xxxxxxxxxxxxx&quot;;<br />
char password[] = &quot;xxxxxxxxxxxxxxxxxxxxxxx&quot;;<br />
int wifipin = 16;<br />
int accpin = 5;</p>
<p>void setup() {</p>
<p>Serial.begin(115200);<br />
Serial.println(&quot;&quot;);</p>
<p>spi_init(HSPI);</p>
<p>pinMode(wifipin,OUTPUT);<br />
pinMode(accpin,OUTPUT);</p>
<p>delay(1000);</p>
<p>digitalWrite(wifipin,LOW);<br />
connectWifi();<br />
digitalWrite(wifipin,HIGH);</p>
<p>delay(1000);</p>
<p>}</p>
<p>void loop() {</p>
<p>digitalWrite(accpin,HIGH);</p>
<p>String value_data = get_value();</p>
<p>String acc_url = &quot;http://xxxxxxxxxxxxxxxxxxxxxxx?&quot;;<br />
String url_string = acc_url + value_data;</p>
<p>Serial.println(url_string);</p>
<p>char buf[256];<br />
url_string.toCharArray(buf,256);</p>
<p>String result_data = getPageSource(buf);</p>
<p>Serial.println(result_data);<br />
digitalWrite(accpin,LOW);</p>
<p>delay(60000);</p>
<p>}</p>
<p>void connectWifi() {</p>
<p>WiFi.disconnect();<br />
delay(250);</p>
<p>Serial.println(&quot;&quot;);<br />
Serial.println(&quot;Status : &quot; + WiFi.status());<br />
Serial.println(&quot;SSID : &quot; + WiFi.SSID());</p>
<p>WiFi.mode(WIFI_STA);<br />
delay(100);<br />
WiFi.begin(ssid, password);</p>
<p>Serial.println(&quot;ssid : &quot; + String(ssid));</p>
<p>while (WiFi.status() != WL_CONNECTED) {<br />
Serial.print(&quot;.&quot;);<br />
delay(500);<br />
}<br />
Serial.println(&quot;&quot;);<br />
Serial.println(&quot;connected!&quot;);<br />
}</p>
<p>String getPageSource(char host[]) {</p>
<p>Serial.println(host);</p>
<p>HTTPClient http;</p>
<p>http.begin(host);<br />
int httpCode = http.GET();</p>
<p>String result = &quot;&quot;;</p>
<p>if (httpCode &lt; 0) {<br />
result = Serial.println(&quot;Error!&quot;);<br />
} else if (http.getSize() &lt; 0) {<br />
result = &quot;size is invalid&quot;;<br />
} else {<br />
result = http.getString();<br />
}</p>
<p>http.end();<br />
return result;<br />
}</p>
<p>String get_value() {</p>
<p>uint32 val0 = check(0);<br />
uint32 val1 = check(1);<br />
uint32 val2 = check(2);</p>
<p>String vale_data = &quot;ba=&quot; + String(val0) + &quot;&amp;so=&quot; + String(val1) + &quot;&amp;br=&quot; + String(val2);</p>
<p>Serial.print(&quot; Battery Voltage : &quot;);<br />
Serial.println(val0);<br />
Serial.print(&quot; Solar Pannel Voltage : &quot;);<br />
Serial.println(val1);<br />
Serial.print(&quot; Brightness : &quot;);<br />
Serial.println(val2);</p>
<p>return vale_data;</p>
<p>}</p>
<p>uint32 check(int channel) {<br />
uint8 cmd = (0b11 &lt;&lt; 3) | channel;</p>
<p>const uint32 COMMAND_LENGTH = 5;<br />
const uint32 RESPONSE_LENGTH = 12;</p>
<p>uint32 retval = spi_transaction(HSPI, 0, 0, 0, 0, COMMAND_LENGTH, cmd, RESPONSE_LENGTH, 0);</p>
<p>retval = retval &amp; 0x3FF; // mask to 10-bit value</p>
<p>return retval;<br />
}</p>
<p>

こんな感じ。。。

多くのネットの諸先輩方の献身的な情報公開によってSPIの接続のとこをはちょっと悩みましたけど。。。

なんとか動きました!!!

 

この情報で取得した結果は、前回同様!!

http://norisuke.servehttp.com/denatsu-graph.html に公開してますんで見てみてね!

 

 

Pocket