ESP32 DevKitCにDHT11つけてみた - Qiita
--------------------------------------------------------------
SDCはSPIでバイブルどうり
---------------BME280------------------
注意!i2cレベルシフタで5v,sda,sclを3v,sda,sclでうけても稼働Vを受けてるわけじゃない
よって、bmeのvccに3.3vを供給する必要がある!
https://wak-tech.com/archives/1642#i-2 でbme280に成功,バイブルと回路少し違う
要注意だ 3v駆動なので5v駆動のlcd,rtc,sdcと組み合わせるのは。。。。
http://marchan.e5.valueserver.jp/cabin/comp/jbox/arc201/doc20103.html では
可能なようでもあるが。。。。
---------------------RTC--------------------------------------------
http://jh7ubc.web.fc2.com/arduino/Arduino_RTC_DS1307.html
でamazon手持ちをテストして成功
4月28日18時36分、木曜(4)、2022年でセットした 電池切れとか外れに注意
#include <Wire.h>
#define RTC_address 0x68
char *week[] = {"日","月","火","水","木","金","土"};
uint8_t REG_table[7]; // データ表示用
void setup() {
Wire.begin();
Serial.begin(115200);
//RTCにデータを書き込む
Wire.beginTransmission(RTC_address);
Wire.write(0x00);//Register 先頭アドレス この手続きの意義は不明
Wire.write(0x36);//second 16進表記で年月日時分秒をBCD表現
Wire.write(0x36);//minute
Wire.write(0x18);//hour
Wire.write(0x04);//week
Wire.write(0x28);//day
Wire.write(0x04);//month
Wire.write(0x22);//year
Wire.endTransmission();
}
void loop() {
Wire.beginTransmission(RTC_address);
Wire.write(0x00);//Register 先頭アドレス この意義は不明
Wire.endTransmission();
//RTCデータの読み込み
Wire.requestFrom(RTC_address,7);
for(int i=0;i<=7;i++){
REG_table[i]=Wire.read();
}
//RTCデータ表示
Serial.print("20");
Serial.print(REG_table[6],HEX);//year
Serial.print("/");
Serial.print(REG_table[5],HEX);//month
Serial.print("/");
Serial.print(REG_table[4],HEX);//day
Serial.print("(");
Serial.print(week[REG_table[3]]);//week
Serial.print(") ");
Serial.print(REG_table[2],HEX);//hour
Serial.print(":");
Serial.print(REG_table[1],HEX);//minute
Serial.print(":");
Serial.print(REG_table[0],HEX);//second
Serial.println();
delay(1000);
}
附:ESP32でRTCモジュールを使う - すいすいSwift (swiswiswift.com)
単に読むだけ、上記セットが成功したら、こちらのほうが簡単かもしれない
//<DS1307RTC.h>を一番上に持ってくる
#include <DS1307RTC.h>
#include <Wire.h>
void setup() {
Serial.begin(115200);
//set SDA and SCL port
//SDA:21 SCL:22 is default
//Some ports can not be used?
//SDAとSCLを設定する。
//SDA:21 SCL:22がデフォルトらしい
//Wire.begin(SDA,SCL) でSDAとSCLの番号を変える
//動くポート番号と動かないポート番号がある?
Wire.begin(21,22); // ArduinoUnoは4,5がデフォルトにて記載不要だった
}
void loop() {
tmElements_t tm;
if (RTC.read(tm)) {
Serial.print("Ok, Time = ");
print2digits(tm.Hour);
Serial.write(':');
print2digits(tm.Minute);
Serial.write(':');
print2digits(tm.Second);
Serial.print(", Date (D/M/Y) = ");
Serial.print(tm.Day);
Serial.write('/');
Serial.print(tm.Month);
Serial.write('/');
Serial.print(tmYearToCalendar(tm.Year));
Serial.println();
} else {
if (RTC.chipPresent()) {
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
} else {
Serial.println("DS1307 read error! Please check the circuitry.");
Serial.println();
}
delay(9000);
}
delay(1000);
}
void print2digits(int number) {
if (number >= 0 && number < 10) {
Serial.write('0');
}
Serial.print(number);
}
ーーーーーーーーーーーーーRTC LCD ーーーーーーーーーーーーーーーーーーーーーーー
http://www.picfun.com/c15.html カスケードは、これがくわしいが。。。
https://burariweb.info/electronic-work/arduino-learning/arduino-rtc-ds3231-i2c-module.html はI2cを二本別々にとりrtc,lcdを動かしている あかんやろカスケードない
https://monolizm.com/sab/pdf/%E7%AC%AC16%E5%9B%9E_%E3%83%97%E3%83%AC%E3%82%BC%E3%83%B3%E8%B3%87%E6%96%99(IC2%E9%80%9A%E4%BF%A1%E7%B7%A8).pdf?fbclid=IwAR3bnU4N7YxnjvUmqZJmc7kHeYbOxtmHM23XNxgC8RvWAdomOoBuSGjKu9Y 意味がいまいちわからん
http://physics.cocolog-nifty.com/weblog/2022/01/post-f0bdfd.html これはいいかも
http://yohaku6066.blog.fc2.com/blog-entry-57.html これもよさげ
一応、rtc,lcdではうまくいった(5v駆動同士)
----------------------RTC/BME/LCD--------------------------
ESP8266では、RTCがうまくいかんかった レベルシフトなしの直付けカスケードで
BME/LCDはうまくいった たぶん、手持ちの20文字4行のLCDが3Vでもうごくためか?
VOUTの5Vだと文字が濃くなったがリスクありと考え3V接続にした
さてESP32だが、LCD/RTCを5V駆動として、5V,SDA,SCLをスイッチサイエンスの
I2Cレベルシフタで3V,SDA,SCLにシフトしてBMEにつなぎ、最終的に21、22ピンに!
以下は途中経過。。。。
#include <DS1307RTC.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <LiquidCrystal_I2C.h>
Adafruit_BME280 bme;
#include <Wire.h>;
float temp;
float pressure;
float humid;
LiquidCrystal_I2C lcd(0x27,20,4);
void setup(){
Wire.begin(21,22);
bool status;
status = bme.begin(0x76);
while (!status) {
Serial.println("BME280 sensor縺御スソ縺医∪縺帙s");
delay(1000);
}
lcd.init(); // Print a message to the LCD.
lcd.backlight();
lcd.setCursor(3,0);
lcd.print("Hello, world!");
Serial.begin(9600);}
void loop() {
temp=bme.readTemperature();
pressure=bme.readPressure() / 100.0F;
humid=bme.readHumidity();
Serial.print("貂ゥ蠎ヲ ;");
Serial.print(temp);
Serial.println(" ツーC");
Serial.print("豌怜悸 ;");
Serial.print(pressure);
Serial.println(" hPa");
Serial.print("貉ソ蠎ヲ ;");
Serial.print(humid);
Serial.println(" %");
Serial.println();
delay(1000);
tmElements_t tm;
if (RTC.read(tm)) {
Serial.print("Ok, Time = ");
print2digits(tm.Hour);
Serial.write(':');
print2digits(tm.Minute);
Serial.write(':');
print2digits(tm.Second);
Serial.print(", Date (D/M/Y) = ");
Serial.print(tm.Day);
Serial.write('/');
Serial.print(tm.Month);
Serial.write('/');
Serial.print(tmYearToCalendar(tm.Year));
Serial.println();
} else {
if (RTC.chipPresent()) {
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
} else {
Serial.println("D n S1307 read error! Please check the circuitry");
Serial.println();
}
delay(9000);
}
delay(1000);
}
void print2digits(int number) {
if (number >= 0 && number < 10) {
Serial.write('0');
}
Serial.print(number);
}
0 件のコメント:
コメントを投稿