DHT11を使用した温湿度計測ユニットのArduinoソースコードは以下のとおりです。やっつけ感満載のソースコードですが、参考になりましたら幸いです。
//---------------------------------------------- // ADT7410 温度計測→SakuraIOへ送信 //---------------------------------------------- #include <SakuraIO.h> #include <DHT.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #if (SSD1306_LCDHEIGHT != 64) #error("Height incorrect, please fix Adafruit_SSD1306.h!"); #endif #define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13 Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); #define DHT11_PIN 8 DHT dht(DHT11_PIN, DHT11); SakuraIO_I2C sakuraio; #define DISP_SEC 60 #define SEND_SEC 900 unsigned long datasend_ms; unsigned long display_ms; float humidity = 0; float temperature = 0; //デバイスを識別する番号:書き込む直前に変更する double device_no = 0; void disp_refresh() { humidity = dht.readHumidity(); temperature = dht.readTemperature(); display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor( 0, 20);display.print(temperature);display.println("C"); display.setCursor( 0, 40);display.print(humidity);display.println("%"); display.display(); } void senddata() { sakuraio.enqueueTx(0, device_no); sakuraio.enqueueTx(1, temperature); sakuraio.enqueueTx(2, humidity); sakuraio.send(); } void setup() { pinMode(7, INPUT); if(digitalRead(7) == HIGH){ device_no = 1; } Serial.begin(9600); dht.begin(); display.begin(SSD1306_SWITCHCAPVCC); display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor( 0, 0);display.println("initialize"); display.display(); while(!sakuraio.getConnectionStatus() & 0x80){ delay(1000); } Serial.println("getConnectionStatus OK"); display.clearDisplay(); display.setCursor( 0, 0);display.println("mt-megami"); display.setCursor( 0,20);display.println(device_no); display.display(); delay(2000); disp_refresh(); delay(3000UL); datasend_ms = millis(); display_ms = millis(); } void loop() { unsigned long now_ms = millis(); if(now_ms > datasend_ms + (1000UL * SEND_SEC)){ disp_refresh(); senddata(); datasend_ms = millis(); return; } if(now_ms > display_ms + (1000UL * DISP_SEC)){ disp_refresh(); display_ms = millis(); return; } }
0件のコメント