温湿度センサーDHT11で取得したデータをシリアル通信でmbedからPCに送る
前回、mbedとDHT11を使って、取得した温湿度をlcdに表示させました。 その時の記事↓ やること 今回は、lcdにも表示させつつ、PCにシリアル通信でデータを送り、PC上で表示させてみたいと思います。 環境 Windows10 Pro バージョン1809 64bit 概要 次はPythonかProcessingでシリアル通信して表示させたいのですが、まずはPCのシリアル通信ソフトで試してみたいと思います。 今回はwindowsで行っているので、TeraTermを用います。 結線 前回と同じです。 表1 : DHT11とmbedの接続 DHT11 mbed 備考 電源(赤色) VOUT 3.3V センサー出力(緑色) 23pin なし GND(黒色) GND 0V mbedのプログラム #include "mbed.h" #include "TextLCD.h" #include "DHT.h" //lcdの初期設定 TextLCD lcd(p10, p12, p15, p16, p29, p30); // RS(4), E(6), D4(11), D5(12), D6(13), D7(14), GND R/W(5) //シリアル通信の初期設定 Serial pc(USBTX, USBRX); // tx, rx //LED1の初期設定 PwmOut led1(LED1); //pwm出力 //DHT11初期設定 DHT sensor(p23,DHT11); //sense:p23 vcc:vout(3.3V) gnd:gnd float temp_data = 0; float humi_data = 0; float temp_sum = 0; float humi_sum = 0; int c = 0; float temp_ave = 0; float humi_ave = 0; Ticker flipper; int err; //"Ticker" 繰り返しタイマー割り込み //割り込みの時にlcdに表示 void flip(){ //lcdに表示 lcd.locate(0,0); lcd.printf("Temp is %2.0f C",temp_ave); //整数の精度なので、小数点以下は出さない lcd.locate(0,1); lcd.printf("Humi is %2.0f %%",humi_ave); //整数の精度なので、小数点以下は出さない //teratermに表示 pc.printf("Temp is %2.0f C\n",temp_ave); //整数の精度なので、小数点以下は出さない pc.printf("Humi is %2.0f %%\n\n",humi_ave); //整数の精度なので、小数点以下は出さない } //main関数 int main(){ lcd.cls(); lcd.locate(0,0); //lcdの表示消去 lcd.printf("Temp and Humi \nSensor"); wait(1); //安定するまでしばし休み lcd.cls(); flipper.attach(&flip,10); //タイマー割り込み動き出す。 10秒ごとに割り込みでvoid flip()に飛ぶ。 while(1){ err = sensor.readData(); if (err == 0){ //err=0は,データが取れたということ。 temp_data = sensor.ReadTemperature(CELCIUS); humi_data = sensor.ReadHumidity(); temp_sum = temp_sum + temp_data; humi_sum = humi_sum + humi_data; c++; if(c==10){ temp_ave = temp_sum/11; humi_ave = humi_sum/11; temp_sum = 0; humi_sum = 0; c=0; led1=0.1; //アベレージが取れたらLED1点灯。眩しくてうざいのでpwmで暗くした } } else{ led1=0; } } } 前回のコードからあまり変わりませんが、シリアル通信に関する部分を追加しています。 ...