https://arduinodiy.wordpress.com/2016/10/11/using-the-4-pins-of-the-esp8266-01/
这是一个使用受限的引脚数来接入多个器件的例子,主人使用的是ESP8266-01,
1 URXD GPIO3 UART_RXD
2 CH_PD
3 RESET GPIO16*
4 VCC
5 GND
6 GPIO2*
7 GPIO0* wifi状态工作模式
8 UTXD GPIO1 UART_TXD
有GPIO2,GPIO15,GPIO0(Wifi状态灯及工作模式),GPIO16(REST),GPIO1(UART_TXD),GPIO3(UART_RXD)
使用2个引脚来做I2C,用于BMP180和OLED
使用1个引脚通过OneWire协议读取2个DS18B20,
使用1个引脚使用DHT11
引脚定义如下:
GPIO0->I2C SDA
GPIO2->I2C SCL
GPIO1->DHT11
GPIO3->OneWire Bus
主人使用单总线读取DS18B20,需要知道器件的地址,这是读取地址的链接:
https://arduino-info.wikispaces.com/Brick-Temperature-DS18B20#Test%20Sketch%20to%20read%20DS18B20%20addresses
文章中提到如果DHT11读取数据出现"failed to read",可能是DHT.cpp 156-158
// End the start signal by setting data line high for 40 microseconds.
digitalWrite(_pin, HIGH);
delayMicroseconds(40);
要把它注释掉
------------------------------------------------
/*
Field 1 temp roost (DHT11)
Field 2 humidity roost (DHT11)
field 3 Coop temperature (DS18B20)
field 4 soil temperature (DS18B20)
field 5 Airpressure (bmp180)
field 6 Outside temperature (bmp180)
* */
#include <DHT.h>
#include <OneWire.h>// http://www.pjrc.com/teensy/td_libs_OneWire.html
#include <DallasTemperature.h> // http://milesburton.com/Main_Page?title=Dallas_Tem...
#include <Adafruit_BMP085.h>
#include <ESP8266WiFi.h>
#include "SSD1306.h"
SSD1306 display(0x3c, 0, 2);
#define DHTPIN 1 //GPIO1 (Tx)
#define DHTTYPE DHT11
#define ONE_WIRE_BUS 3 // GPIO3=Rx
const char* ssid = "YourSSID";
const char* password = "YourPassword";
const char* host = "api.thingspeak.com";
const char* writeAPIKey = "W367812985"; //use YOUR writeApi
//DHT11 stuff
float temperature_buiten;
float temperature_buiten2;
DHT dht(DHTPIN, DHTTYPE, 15);
//DS18b20 stuff
OneWire oneWire(ONE_WIRE_BUS); //oneWire instance to communicate with any OneWire devices
DallasTemperature sensors(&oneWire);// Pass address of our oneWire instance to Dallas Temperature.
DeviceAddress Probe01 = { 0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F};
DeviceAddress Probe02 = { 0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9};
// bmp180 stuff
Adafruit_BMP085 bmp;
void setup() {
//I2C stuff
Wire.pins(0, 2);
Wire.begin(0, 2);
// Initialize sensors
//dht 11 stuff
dht.begin();
//ds18b20 stuff
sensors.begin();//ds18b20
// set the resolution to 10 bit (Can be 9 to 12 bits .. lower is faster)
sensors.setResolution(Probe01, 10);
sensors.setResolution(Probe02, 10);
//bmp180 stuff
if (!bmp.begin()) {
// Serial.println("No BMP180 / BMP085");
// while (1) {}
}
//OLED stuff
display.init();
display.flipScreenVertically();
display.setFont(ArialMT_Plain_10);
delay(1000);
// Connect to WiFi network
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
}
void loop() {
//ds18b20stuff-------------------
sensors.requestTemperatures(); // Send the command to get temperatures
temperature_buiten = sensors.getTempC(Probe01);//
temperature_buiten2 = sensors.getTempC(Probe02);//
//dht11 stuff--------------------
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
return;
}
//bmp stuff-------------------------
String t= String(bmp.readTemperature());
String p=String(bmp.readPressure());
//OLED stuff--------------------------
display.clear();
display.drawString(0,10,p);//bmp pressure
display.drawString(0,24,String(temperature_buiten));//ds18b20
display.drawString(0,38,String(humidity));//dht11
display.display();
// make TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
return;
}
String url = "/update?key=";
url += writeAPIKey;
url += "&field1=";
url += String(temperature);// roost (DHT1)
url += "&field2=";
url += String(humidity);// roost (DHT11)
url += "&field3=";
url += String(temperature_buiten);//coop temperature (DS18B20 nr 1)
url += "&field4=";
url += String(temperature_buiten2); //soil temperature (DS18B29 nr 2)
url +="&field5=";
url +=String(bmp.readTemperature());Outside temperature (BMP180)
url +="&field6=";
url +=String(bmp.readPressure());// Airpressure (BMP180)
url += "\r\n";
// Send request to the server
client.print(String("GET url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
delay(1000);
}
没有评论:
发表评论