hiro yamamoto works

ESP8266 Web logger
RaspberryPi HiRes Audio
Mini Solar power system
当ブログ掲載内容は無保証です。利用は自己責任でお願いいたします。

 

カレンダー

2020
July
Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

QRコード

検索



このブログを検索

カウンター

本日のアクセス
昨日のアクセス
総アクセス数

ブログサービス

Powered by

teacup.ブログ
RSS

データロガーを温湿度計として使います。

自作データロガーをデジタル温湿度計として使っています。

肝心の温湿度表示が小さいので、直さないといけません。
クリックすると元のサイズで表示します

センサはAdafruit Si7021 Temperature & Humidity Sensor Breakout Boardです。
クリックすると元のサイズで表示します

センサ仕様
電源電圧:3.3 V or 5.0 V
3.3VレギュレーターとI2Cレベルシフタ搭載
計測範囲
湿度センサ:0〜80% RH
温度センサ:-10〜85℃
計測精度
湿度センサ:±3% RH(0〜80% RH)
温度センサ:±0.4℃(-10〜85℃)
I2Cインターフェース
寸法 :17.8 mm ×15.3 mm ×3.0 mm
センサ上部にある白い平らなものは、センサをきれいに保つ
ためのPTFEフィルタと書いてありました。

データロガー応用の温湿度計です。
家庭で使う温湿度計としては必要ない機能ですが
温湿度データをSDメモリへ記録しています。
ESP-WROOM-02マイコンを使っているので、
WiFi経由でデータへアクセスできます。

クリックすると元のサイズで表示します
0
投稿者:管理人

ESP-WROOM-02 SDカード内のsetup.txtを使ってWi-Fi接続する。

ESP-WROOM-02マイコンに接続したSDメモリカード内に
WiFi、ネットワーク設定を書いたsetup.txtというファイルを
置いて、起動時に読み込んで接続することができました。

webブラウザでSD内ファイルがすべて見えてしまう問題が
ありましたが、特定のファイルだけ見えないようにすることが
出来ました。
特定ファイルを開かせない・・・を見て下さい。
追記 2020/07/26
クリックすると元のサイズで表示します
ip address,gateway,sabnet,dnsは固定できるように
しました。必要なければスケッチのIPAdress行と
WiFi.config行の頭に//をつけてコメント行にしてください。

投稿当初
ボードマネージャバージョンの違いでWiFi接続に失敗する
現象を確認しましたが、現在は発生しません。参考に
ボードマネージャバージョン2.5.2では発生なし。
ボードマネージャバージョン2.6.2は調査中
ボードマネージャバージョン2.7.2で書き込み後最初の
動作でかなりの確率で接続失敗しました。
その後RESETすると接続できました。

作例をWeb公開している方々に感謝します。


setup.txt例とスケッチを紹介します。

SDメモリカードにsetupというフォルダを作り、下記内容を
setup.txtというファイルを作って保存します。
setup.txt例
##以降はコメントとして扱われます。
#SSのあとにSSID、paのあとにpasswordを入力してください
#SS your-SSID #SSID
#pa your-password #password
#
SS ********** #SSID
pa ********** #password
#
#gw 192,168, 1, 1 #gateway
#sn 255,255,255, 0 #subnet
#dn 192,168, 1, 1 #dnS1
#ip 192,168, 1, 10 #ip address
#
gw 192,168, 1, 1 #gateway
sn 255,255,255, 0 #subnet
dn 192,168, 1, 1 #dnS1
ip 192,168, 1, 10 #ip address


スケッチ
スケッチ例DumpFileを改変したものです。
#include行のライブラリ名を<>で囲んで下さい。

#include SPI.h
#include SD.h
#include ESP8266WiFi.h
const int chipSelect = 15;
String ssid;
String password;
int gw[4], sn[4], dn[4], ip[4];
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
//while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
//}
Serial.print("Initializing SD card...");
// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
// don't do anything more:
return;
}
Serial.println("card initialized.");
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
File dataFile = SD.open("setup/setup.txt",FILE_READ);//setupフォルダ内setup.txtをopen
// if the file is available, write to it:
if (dataFile) {
while (dataFile.available()) {//dataFileを1行づつ評価していく
String line = dataFile.readStringUntil('\n');//終端文字'\n'が検出されるまで読んで文字列全体をlineへ入れる
line = line.substring(0, line.indexOf('#'));//インデックス0(行頭)から(#までのインデックス数)の文字列取得
if (line.substring(0, 2) == "SS") {
ssid = line.substring(line.indexOf(' '));//スペースから行末まで
ssid.trim();//スペース等を除去
} else if (line.substring(0, 2) == "pa") {
password = line.substring(line.indexOf(' '));//スペースから行末まで
password.trim();//スペース等を除去
} else if (line.substring(0, 2) == "gw") {
String gw0 = line.substring(3, 6);
String gw1 = line.substring(7, 10);
String gw2 = line.substring(11, 14);
String gw3 = line.substring(15, 18);
gw[0] = gw0.toInt(); gw[1] = gw1.toInt(); gw[2] = gw2.toInt(); gw[3] = gw3.toInt();
} else if (line.substring(0, 2) == "sn") {
String sn0 = line.substring(3, 6);
String sn1 = line.substring(7, 10);
String sn2 = line.substring(11, 14);
String sn3 = line.substring(15, 18);
sn[0] = sn0.toInt(); sn[1] = sn1.toInt(); sn[2] = sn2.toInt(); sn[3] = sn3.toInt();
} else if (line.substring(0, 2) == "dn") {
String dn0 = line.substring(3, 6);
String dn1 = line.substring(7, 10);
String dn2 = line.substring(11, 14);
String dn3 = line.substring(15, 18);
dn[0] = dn0.toInt(); dn[1] = dn1.toInt(); dn[2] = dn2.toInt(); dn[3] = dn3.toInt();
} else if (line.substring(0, 2) == "ip") {
String ip0 = line.substring(3, 6);
String ip1 = line.substring(7, 10);
String ip2 = line.substring(11, 14);
String ip3 = line.substring(15, 18);
ip[0] = ip0.toInt(); ip[1] = ip1.toInt(); ip[2] = ip2.toInt(); ip[3] = ip3.toInt();
}
}
dataFile.close();

}
// if the file isn't open, pop up an error:
else {
Serial.println("error opening setup.txt");
}
Serial.println(), Serial.println();
Serial.print("Connecting to "), Serial.println(ssid);
IPAddress local_IP(ip[0], ip[1], ip[2], ip[3]);
IPAddress gateway(gw[0], gw[1], gw[2], gw[3]); // NTPサーバ名アクセス時必要
IPAddress subnet(sn[0], sn[1], sn[2], sn[3]);
IPAddress dns1(dn[0], dn[1], dn[2], dn[3]); // NTPサーバ名アクセス時必要
WiFi.mode(WIFI_STA);//WiFi子機モード
WiFi.config(local_IP, gateway, subnet, dns1);//ESP引数順序変更不可 NTPサーバ名アクセス時dns1要
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(""); Serial.println("WiFi connected!");
Serial.print("IP address: "); Serial.println(WiFi.localIP());
Serial.print("ESP Mac Address: "); Serial.println(WiFi.macAddress());
Serial.print("Subnet Mask: "); Serial.println(WiFi.subnetMask());
Serial.print("Gateway IP: "); Serial.println(WiFi.gatewayIP());
Serial.print("DNS: "); Serial.println(WiFi.dnsIP());
}
void loop() {
}


ArduinoIDEにコピペしたらメニューの「ツール」「自動整形」
で見やすくなります。
#includeのライブラリ名を忘れずに<>で囲って下さい。

無保証自己責任でよろしくお願いします。
0
投稿者:管理人
1 | 《前のページ | 次のページ》
/1 
 
AutoPage最新お知らせ