ArduinoとEthernetモジュールを使った例を
過去の記事から。

続・バイク好き!セロリ嫌い!

Microchip社の少し古いEthernetモジュール(ENC28J60)と温湿度センサー(HDC1000)、Arduino Pro Miniを接続してみました。

前回、ESP-WROOM-02と温湿度センサーを使ってMQTTブローカーに定期的に温度と湿度の計測データを投げる仕組みを作りましたが、それのArduino & 有線版といったところです。

ESP-WROOM-02を使ったものは漆風呂の温湿度管理を行うのを目的としていました。何日か実験してみて、漆風呂が置かれた工房の環境に影響を受けることがよくわかったので、空調設備(エアコン)のある工房の環境をある程度安定させれば、漆風呂の中の環境がもう少し安定すると思いました。空調設備はリモコンで操作できますが、マイコンから赤外線LEDを操作すればリモコンを操作するのと同等のことがやれるはずなので、工房の温湿度を調整するためにこれで空調設備の入り切りや温度調整などができたら良いと思います。

Arduino Pro MiniとHDC1000は、ArduinoのA4をHDC1000のSDAに、A5をSCLにそれぞれ接続します。HDC1000はモジュール上でプルアップされているので抵抗などを別途配線しません。(VCCとGNDも当然接続します)

Arduino Pro MiniとENC28J60はArduinoのD13をENC28J60のSCKに、D12をSOに、D11をSIに、D8をCSにそれぞれ接続します。(VCCとGNDも当然接続します)

2016-08-24 23.40.21-.jpg

ENC28J60を制御するEtherCardライブラリはhttps://github.com/jcw/ethercardからダウンロードしたzip形式のものをArduino IDEから読み込みます。

ENC82J60のCSにはArduinoのD8を接続していますが、D10でも構いません。ソース中のether.begin()の3つ目の引数でD8ならば8を、D10なら10をセットすればいいです。

こちらが動作している様子。

2016-08-24 23.39.19-

とりあえずDHCPで自IPアドレスを取得して、WebServerとして動作するものを作って動作を確認しました。以下がそのソースコードです。EtherCardライブラリを読み込むとインストールされるサンプルスケッチ rbbb_server に少し手を加えたものです。

#include <HDC1000.h> #include <EtherCard.h> static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; byte Ethernet::buffer[700]; BufferFiller bfill; HDC1000 hdc1000; void setup () { Serial.begin(57600); Serial.print("MAC: "); for (byte i = 0; i < 6; ++i) { Serial.print(mymac[i], HEX); if (i < 5) Serial.print(':'); } Serial.println(); if (ether.begin(sizeof Ethernet::buffer, mymac, 8) == 0) Serial.println(F("Failed to access Ethernet controller")); Serial.println(F("Setting up DHCP")); if (!ether.dhcpSetup()) Serial.println(F("DHCP failed")); ether.printIp("My IP: ", ether.myip); ether.printIp("Netmask: ", ether.netmask); ether.printIp("GW IP: ", ether.gwip); ether.printIp("DNS IP: ", ether.dnsip); hdc1000.begin(); } void formattedFloat(float val, char buffer[]) { dtostrf(val, 4, 2, buffer); } static word homePage() { float h = hdc1000.getHumidity(); float t = hdc1000.getTemperature(); char hs[10]; char ts[10]; formattedFloat(h-8.0, hs); formattedFloat(t, ts); bfill = ether.tcpOffset(); bfill.emit_p(PSTR( "HTTP/1.0 200 OKrn" "Content-Type: text/htmlrn" "Pragma: no-cachern" "rn" "<html><head>" "<meta http-equiv='refresh' content='3'/>" "<title>Temp/Humid server</title></head><body>"…

元の投稿を表示 さらに81語