
创客这个词,现在不怎么提了,创新很难。玩可以,但是总是出新比较难。有一个团队很好,总能推出新东西,这里不介绍,怕被锁。这里就讲讲基础的东西。
一套设备,就是传感器——感知周围物理化学的变化;存储器——把数据记录下来;通讯器——传递数据;当然还有处理器,把物理化学的信号变成电信号。
这样讲简单吧,当然有的时候幽默只在圈里,只有圈里人懂。

传感器—测量温度、空气湿度

显示器—显示数据

存储器—给出时间,存储数据
/////////////////////////////////
#include "Wire.h"
#include <LiquidCrystal.h>
//#include "LiquidCrystal_I2C.h"
#include "DHT.h"
#include "uRTCLib.h"
#include <AT24Cxx.h>
//#include "EEPROM.h"
#include <EEPROM.h>
#define DHTPIN 8
#define DHTTYPE DHT11
//#define DHTTYPE DHT22
#define i2c_address 0x57
LiquidCrystal Lcd(7,6,5,4,3,2);
//设置LCD1602设备地址,这里的地址是0x3F,一般是0x20,或者0x27,具体看模块手册
//LiquidCrystal_I2C Lcd(0x27,16,2);
DHT dht(DHTPIN,DHTTYPE);
uRTCLib rtc(0x68);
//uRTCLib rtc;
int y1;
int m1;
int d1;
int w1;
int h1;
int m2;
int s1;
float h;
float t;
int address;
AT24Cxx eep(i2c_address, 32); // Initilaize using AT24CXX(i2c_address, size of eeprom in KB).
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.print("This is DATA OF HUMIDITY AND TEMPERATURE!\r\n");
//////
delay (2000);
#ifdef ARDUINO_ARCH_ESP8266
URTCLIB_WIRE.begin(0, 2); // D3 and D4 on ESP8266
#else
URTCLIB_WIRE.begin();
#endif
//rtc.set(0, 20, 15, 2, 27, 9, 22);
// RTCLib::set(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year)
//////
dht.begin();
Lcd.begin(16,2);
//Lcd.init();
//Lcd.backlight();
Lcd.print("Hello world");
delay(1000);
Lcd.setCursor(7,1);
Lcd.print("2022.9.28");
address = eep.read(0);
Serial.print("I2C address=");
Serial.print(address);
Serial.println();
delay(1000);
}
void lcddoing()
{
Lcd.clear();
Lcd.setCursor(0,0);
Lcd.print("Humidity:");
Lcd.print(h);
Lcd.print("%");
Lcd.setCursor(0,1);
Lcd.print("Temperat:");
Lcd.print(t);
Lcd.print("C");
delay(5000);
Lcd.clear();
Lcd.setCursor(0,0);
Lcd.print("date:");
Lcd.print(y1);
Lcd.print("-");
Lcd.print(m1);
Lcd.print("-");
Lcd.print(d1);
Lcd.print(" ");
Lcd.print("dow");
Lcd.setCursor(0,1);
Lcd.print("time:");
Lcd.print(h1);
Lcd.print(":");
Lcd.print(m2);
Lcd.print(":");
Lcd.print(s1);
Lcd.print(" ");
Lcd.print(w1);
}
void serialdoing()
{
rtc.refresh();
y1=rtc.year();
m1=rtc.month();
d1=rtc.day();
w1=rtc.dayOfWeek();
h1=rtc.hour();
m2=rtc.minute();
s1=rtc.second();
Serial.print("RTC DateTime: ");
Serial.print(y1);
Serial.print('/');
Serial.print(m1);
Serial.print('/');
Serial.print(d1);
Serial.print(' ');
Serial.print(h1);
Serial.print(':');
Serial.print(m2);
Serial.print(':');
Serial.print(s1);
Serial.print(" DOW: ");
Serial.print(w1);
//Serial.print(" - Temp: ");
//Serial.print(rtc.temp() / 100);
// Serial.println();
delay(1000);
h=dht.readHumidity();
t=dht.readTemperature();
float f=dht.readTemperature(true);
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
Serial.print(F(" Humidity: "));
Serial.print(h);
Serial.print(F("% Temperature: "));
Serial.print(t);
Serial.print(F("°C "));
Serial.print("\r\n");
delay(1000);
}
void loop() {
// put your main code here, to run repeatedly:
serialdoing();
//LCD doing...
lcddoing();
//24c32 doing...
float add1;
int y2;
int m3;
int d2;
int h2;
int m4;
int s2;
float hu; //=0.00f; // float f = 0.00f;
float te; //=0.00f;
add1 = 14*address + 1;
eep.update(add1,y1);
y2=eep.read(add1);
add1 = add1 + 1;
eep.update(add1,m1);
m3=eep.read(add1);
add1 = add1 + 1;
eep.update(add1,d1);
d2=eep.read(add1);
add1 = add1 + 1;
eep.update(add1,h1);
h2=eep.read(add1);
add1 = add1 + 1;
eep.update(add1,m2);
m4=eep.read(add1);
add1 = add1 + 1;
eep.update(add1,s1);
s2=eep.read(add1);
add1 = add1 + 1;
EEPROM.put(add1,h);
// EEPROM.commit();
//hu=eep.get(add1);
EEPROM.get(add1, hu);
add1 = add1 + 4;
EEPROM.put(add1,t);
// EEPROM.commit();
//te=eep.get(add1);
EEPROM.get(add1, te);
if (address == 255) {
add1 = 0;
address = 0;
eep.update(0,address);
}
else
address=address+1;
{eep.update(0,address);
}
Serial.print("NO.") ;
Serial.print(address);
Serial.print(" i2c'DateTime:");
Serial.print(y2);
Serial.print('-');
Serial.print(m3);
Serial.print('-');
Serial.print(d2);
Serial.print(' ');
Serial.print(h2);
Serial.print(':');
Serial.print(m4);
Serial.print(':');
Serial.print(s2);
Serial.print(F(" Humidity: "));
Serial.print(hu);
Serial.print(F("% Temperature: "));
Serial.print(te);
Serial.print(F("°C "));
Serial.print("\r\n");
}
////////////////////////
这里就一个小难点,24c32的存储模式,是一个字节,对于int型数据很简单用read(),writer();对于float型数据,需要用到EEPROM.h 库中的put,get。
网友评论