WeMos (b4) DHT22 温度湿度表示

BMP280気圧センサーとNikia 5110同時に使うため、SPIで通信する環境を作って試したが、相性が悪いようだ。

どちらでも単独では動くが、一緒になると、表示がうあくいかない。

そこで、DHT22という温度湿度を試して見ることに。I2C,SPIどちらでもないので、相性が問題ならないと思う。

これは成功

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
/* Hello World
* Display a simple message on the first line of the screen
*
* Connections:
* WeMos D1 Mini Nokia 5110 Description
* (ESP8266) PCD8544 LCD
*
* D2 (GPIO4) 0 RST Output from ESP to reset display
* D1 (GPIO5) 1 CE Output from ESP to chip select/enable display
* D6 (GPIO12) 2 DC Output from display data/command to ESP
* D7 (GPIO13) 3 Din Output from ESP SPI MOSI to display data input
* D5 (GPIO14) 4 Clk Output from ESP SPI clock
* 3V3 5 Vcc 3.3V from ESP to display
* D0 (GPIO16) 6 BL 3.3V to turn backlight on, or PWM
* G 7 Gnd Ground
*
* Dependencies:
* https://github.com/adafruit/Adafruit-GFX-Library
* https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library
* - This pull request adds ESP8266 support:
* - https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library/pull/27
*/
#include <Arduino.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
// Pins
const int8_t RST_PIN = D2;
const int8_t CE_PIN = D1;
const int8_t DC_PIN = D6;
//const int8_t DIN_PIN = D7; // Uncomment for Software SPI
//const int8_t CLK_PIN = D5; // Uncomment for Software SPI
const int8_t BL_PIN = D0;
// Software SPI with explicit CE pin.
// Adafruit_PCD8544 display = Adafruit_PCD8544(CLK_PIN, DIN_PIN, DC_PIN, CE_PIN, RST_PIN);
// Software SPI with CE tied to ground. Saves a pin but other pins can't be shared with other hardware.
// Adafruit_PCD8544(int8_t CLK_PIN, int8_t DIN_PIN, int8_t DC_PIN, int8_t RST_PIN);
// Hardware SPI based on hardware controlled SCK (SCLK) and MOSI (DIN) pins. CE is still controlled by any IO pin.
// NOTE: MISO and SS will be set as an input and output respectively, so be careful sharing those pins!
Adafruit_PCD8544 display = Adafruit_PCD8544(DC_PIN, CE_PIN, RST_PIN);
#include "DHT.h"
#define DHTPIN D4 // what pin we're connected to
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("\n\nWeMos D1 Mini + Nokia 5110 PCD8544 84x48 Monochrome LCD\nUsing Adafruit_PCD8544 and Adafruit_GFX libraries\n");
// Turn LCD backlight on
pinMode(BL_PIN, OUTPUT);
digitalWrite(BL_PIN, HIGH);
display.begin();
display.setContrast(60); // Adjust for your display
Serial.println("Show Adafruit logo bitmap");
// Show the Adafruit logo, which is preloaded into the buffer by their library
// display.clearDisplay();
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(0,0);
display.println("Hello, world!");
display.display();
Serial.println("You should now see Hello, world! on the display");
dht.begin();
}
void loop() {
// Wait a few seconds between measurements.
delay(2000);
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f))
{
Serial.println("Failed to read from DHT sensor!");
return;
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(0, 0);
display.println("Humidity: ");
display.print(h);
display.println(" %\t");
display.println("Temperature: ");
display.print(t);
display.println(" *C ");
display.print(f);
display.println(" *F");
display.display();
}
/* Hello World * Display a simple message on the first line of the screen * * Connections: * WeMos D1 Mini Nokia 5110 Description * (ESP8266) PCD8544 LCD * * D2 (GPIO4) 0 RST Output from ESP to reset display * D1 (GPIO5) 1 CE Output from ESP to chip select/enable display * D6 (GPIO12) 2 DC Output from display data/command to ESP * D7 (GPIO13) 3 Din Output from ESP SPI MOSI to display data input * D5 (GPIO14) 4 Clk Output from ESP SPI clock * 3V3 5 Vcc 3.3V from ESP to display * D0 (GPIO16) 6 BL 3.3V to turn backlight on, or PWM * G 7 Gnd Ground * * Dependencies: * https://github.com/adafruit/Adafruit-GFX-Library * https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library * - This pull request adds ESP8266 support: * - https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library/pull/27 */ #include <Arduino.h> #include <Wire.h> #include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> // Pins const int8_t RST_PIN = D2; const int8_t CE_PIN = D1; const int8_t DC_PIN = D6; //const int8_t DIN_PIN = D7; // Uncomment for Software SPI //const int8_t CLK_PIN = D5; // Uncomment for Software SPI const int8_t BL_PIN = D0; // Software SPI with explicit CE pin. // Adafruit_PCD8544 display = Adafruit_PCD8544(CLK_PIN, DIN_PIN, DC_PIN, CE_PIN, RST_PIN); // Software SPI with CE tied to ground. Saves a pin but other pins can't be shared with other hardware. // Adafruit_PCD8544(int8_t CLK_PIN, int8_t DIN_PIN, int8_t DC_PIN, int8_t RST_PIN); // Hardware SPI based on hardware controlled SCK (SCLK) and MOSI (DIN) pins. CE is still controlled by any IO pin. // NOTE: MISO and SS will be set as an input and output respectively, so be careful sharing those pins! Adafruit_PCD8544 display = Adafruit_PCD8544(DC_PIN, CE_PIN, RST_PIN); #include "DHT.h" #define DHTPIN D4 // what pin we're connected to #define DHTTYPE DHT22 // DHT 22 (AM2302) DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); Serial.println("\n\nWeMos D1 Mini + Nokia 5110 PCD8544 84x48 Monochrome LCD\nUsing Adafruit_PCD8544 and Adafruit_GFX libraries\n"); // Turn LCD backlight on pinMode(BL_PIN, OUTPUT); digitalWrite(BL_PIN, HIGH); display.begin(); display.setContrast(60); // Adjust for your display Serial.println("Show Adafruit logo bitmap"); // Show the Adafruit logo, which is preloaded into the buffer by their library // display.clearDisplay(); delay(2000); display.clearDisplay(); display.setTextSize(1); display.setTextColor(BLACK); display.setCursor(0,0); display.println("Hello, world!"); display.display(); Serial.println("You should now see Hello, world! on the display"); dht.begin(); } void loop() { // Wait a few seconds between measurements. delay(2000); float h = dht.readHumidity(); float t = dht.readTemperature(); float f = dht.readTemperature(true); // Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t) || isnan(f)) { Serial.println("Failed to read from DHT sensor!"); return; } display.clearDisplay(); display.setTextSize(1); display.setTextColor(BLACK); display.setCursor(0, 0); display.println("Humidity: "); display.print(h); display.println(" %\t"); display.println("Temperature: "); display.print(t); display.println(" *C "); display.print(f); display.println(" *F"); display.display(); }
/* Hello World
 * Display a simple message on the first line of the screen
 *
 * Connections:
 * WeMos D1 Mini   Nokia 5110    Description
 * (ESP8266)       PCD8544 LCD
 *
 * D2 (GPIO4)      0 RST         Output from ESP to reset display
 * D1 (GPIO5)      1 CE          Output from ESP to chip select/enable display
 * D6 (GPIO12)     2 DC          Output from display data/command to ESP
 * D7 (GPIO13)     3 Din         Output from ESP SPI MOSI to display data input
 * D5 (GPIO14)     4 Clk         Output from ESP SPI clock
 * 3V3             5 Vcc         3.3V from ESP to display
 * D0 (GPIO16)     6 BL          3.3V to turn backlight on, or PWM
 * G               7 Gnd         Ground
 *
 * Dependencies:
 * https://github.com/adafruit/Adafruit-GFX-Library
 * https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library
 * - This pull request adds ESP8266 support:
 * - https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library/pull/27
 */

#include <Arduino.h>

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

// Pins
const int8_t RST_PIN = D2;
const int8_t CE_PIN = D1;
const int8_t DC_PIN = D6;
//const int8_t DIN_PIN = D7;  // Uncomment for Software SPI
//const int8_t CLK_PIN = D5;  // Uncomment for Software SPI
const int8_t BL_PIN = D0;


// Software SPI with explicit CE pin.
// Adafruit_PCD8544 display = Adafruit_PCD8544(CLK_PIN, DIN_PIN, DC_PIN, CE_PIN, RST_PIN);

// Software SPI with CE tied to ground. Saves a pin but other pins can't be shared with other hardware.
// Adafruit_PCD8544(int8_t CLK_PIN, int8_t DIN_PIN, int8_t DC_PIN, int8_t RST_PIN);

// Hardware SPI based on hardware controlled SCK (SCLK) and MOSI (DIN) pins. CE is still controlled by any IO pin.
// NOTE: MISO and SS will be set as an input and output respectively, so be careful sharing those pins!
Adafruit_PCD8544 display = Adafruit_PCD8544(DC_PIN, CE_PIN, RST_PIN);

#include "DHT.h"
#define DHTPIN D4     // what pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302)
 
DHT dht(DHTPIN, DHTTYPE);
 
void setup() {
  Serial.begin(9600);
  Serial.println("\n\nWeMos D1 Mini + Nokia 5110 PCD8544 84x48 Monochrome LCD\nUsing Adafruit_PCD8544 and Adafruit_GFX libraries\n");

  // Turn LCD backlight on
  pinMode(BL_PIN, OUTPUT);
  digitalWrite(BL_PIN, HIGH);

  display.begin();
  display.setContrast(60);  // Adjust for your display
  Serial.println("Show Adafruit logo bitmap");

  // Show the Adafruit logo, which is preloaded into the buffer by their library
  // display.clearDisplay();
  delay(2000);

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.setCursor(0,0);
  display.println("Hello, world!");
  display.display();
  Serial.println("You should now see Hello, world! on the display");

  dht.begin();
}

void loop() {

    // Wait a few seconds between measurements.
  delay(2000);
 
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);
 
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) 
  {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
 
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(BLACK);

  display.setCursor(0, 0);
  display.println("Humidity: ");

  display.print(h);
  display.println(" %\t");

  display.println("Temperature: ");

  display.print(t);
  display.println(" *C ");
  display.print(f);
  display.println(" *F");
  display.display();
  
}

表示も大丈夫。

しかし、SPIのNikia 5110と、他のI2C,SPIデバイスと共存できないかな?