谁不想要一个温湿度小电视呢
你可以在这次项目学到
- PCB的绘制与订购简单了解(嘉立创&立创EDA)
- 焊接简单了解(插脚原件焊接)
- 激光雕刻的简单使用
- arduino开发入门
- IOT通讯了解(MQTT)
本项目中的引脚定义:
IIC :
SCL— D1
SDA—D2
DHT11:
DATA—D4
http://arduino.esp8266.com/stable/package_esp8266com_index.json
下载MQTT客户端 这里建议使用MQTTx 支持多平台的使用
#include <U8g2lib.h>
#include <Arduino.h>
#include "DHT.h"
#define DHTPIN D4 //参照BBS项目前期准备的内容
#define DHTTYPE DHT11
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ D1, /* data=*/ D2, /* reset=*/ U8X8_PIN_NONE); // All Boards without Reset of the Display
//这一条是使用u8g2库初始化屏幕实例的语句,是从example里面找到对应合适的屏幕种类后填入了我们对应的板子的引脚号
DHT dht(DHTPIN,DHTTYPE); //初始化DHT11 温湿度传感器
int t1 = 0; //用于储存温度值
int t2 = 0; //用于储存湿度值
int errorFlag = 0; //记录是否出错
void setup() {
pinMode(D4, INPUT); //从D4这个接口读取温湿度的数据
dht.begin();
u8g2.begin();
u8g2.enableUTF8Print(); //一些初始化
Serial.begin(115200); //建立串口通讯
}
void loop() {
delay(2000); //可以自己调整一下,看看有什么效果
if (isnan(dht.readTemperature())) {
Serial.println(F("Error !"));
errorFlag = 1;// 如果连接有问题或者传感器有问题就设置错误标记
}
t1 = (int)(dht.readTemperature());
t2 = (int)(dht.readHumidity());
//读取DHT11传感器内的信息
Serial.println(t1);
Serial.println(t2);
//将信息打印在串口通讯
u8g2.firstPage();//刷新页面
do {
u8g2.setFont(u8g2_font_ncenB08_tr);//u8g2_font_ncenB08_tr:先设置显示屏显示什么类型的文字,中文需要设置成另外的参数。
if(!errorFlag){
u8g2.drawStr(16, 13, "Tem:");//128*64,横坐标为128,纵坐标为64,原点在屏幕的左上角。在坐标为(6,13)的地方插入“Tem”。
u8g2.setCursor(49,13);
u8g2.print(t1); //print 之前需要先设置光标
u8g2.setCursor(49,28);
u8g2.print(t2);
u8g2.drawCircle(62,3,1,U8G2_DRAW_ALL);
u8g2.drawStr(63,13,"C");
u8g2.drawStr(16, 28, "Hum:");
u8g2.drawStr(62, 28, "%");
}else{
u8g2.setCursor(20,40);
u8g2.print("Error"); //print 之前需要先设置光标
}//加入DHT11连接错误的判断
u8g2.setCursor(25,60);
u8g2.print("Makers Go!");
} while (u8g2.nextPage());
errorFlag = 0; //标志位重置
}
#include <U8g2lib.h>
#include <Arduino.h>
#include "DHT.h"
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#define DHTPIN D4 //参照BBS项目前期准备的内容
#define DHTTYPE DHT11
// Update these with values suitable for your network.
const char* ssid = "SCU_Makers";
const char* password = "xxxxxx"; //社团的WIFI和密码
const char* mqtt_server = "scumaker.org"; //MQTT服务器 默认的这个只能在校园网下访问
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
#define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
int value = 0;
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Create a random client ID
String clientId = "ESP8266Client-";
clientId += String(random(0xffff), HEX);
// Attempt to connect
if (client.connect(clientId.c_str())) {
Serial.println("connected");
// Once connected, publish an announcement...
client.publish("outTopic", "hello world");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ D1, /* data=*/ D2, /* reset=*/ U8X8_PIN_NONE); // All Boards without Reset of the Display
//这一条是使用u8g2库初始化屏幕实例的语句,是从example里面找到对应合适的屏幕种类后填入了我们对应的板子的引脚号
DHT dht(DHTPIN,DHTTYPE); //初始化DHT11 温湿度传感器
int t1 = 0;
int t2 = 0;
int errorFlag = 0;
void setup() {
setup_wifi();
client.setServer(mqtt_server, 1883);
pinMode(D4, INPUT); //从D4这个接口读取温湿度的数据
dht.begin();
u8g2.begin();
u8g2.enableUTF8Print(); //一些初始化
Serial.begin(115200);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
delay(2000); //可以自己调整一下,看看有什么效果
if (isnan(dht.readTemperature())) {
Serial.println(F("Error !"));
errorFlag = 1;// 如果连接有问题或者传感器有问题就设置错误标记
}
t1 = (int)(dht.readTemperature());
t2 = (int)(dht.readHumidity());
//读取DHT11传感器内的信息
snprintf (msg, MSG_BUFFER_SIZE, "Temp: %d Humid: %d", t1,t2);
client.publish("%$%$%", msg);
Serial.println(t1);
Serial.println(t2);
//
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_ncenB08_tr);//u8g2_font_ncenB08_tr:先设置显示屏显示什么类型的文字,中文需要设置成另外的参数。
if(!errorFlag){
u8g2.drawStr(16, 13, "Tem:");//128*64,横坐标为128,纵坐标为64,原点在屏幕的左上角。在坐标为(6,13)的地方插入“Tem”。
u8g2.setCursor(49,13);
u8g2.print(t1); //print 之前需要先设置光标
u8g2.setCursor(49,28);
u8g2.print(t2);
u8g2.drawCircle(62,3,1,U8G2_DRAW_ALL);
u8g2.drawStr(63,13,"C");
u8g2.drawStr(16, 28, "Hum:");
u8g2.drawStr(62, 28, "%");
}else{
u8g2.setCursor(20,40);
u8g2.print("Error"); //print 之前需要先设置光标
}//加入DHT11连接错误的判断
u8g2.setCursor(25,60);
u8g2.print("Makers Go!");
} while (u8g2.nextPage());
errorFlag = 0; //标志位重置
}
如果大家在非校园网环境下尝试MQTT服务器连接,可以使用 mqtt.toufupi.top port:1883