2024年12月1日日曜日

Visual Studio C# Arduino DHT11温度読込

Visual Studio 2022 C# Windowsアプリを作成してArduino DHT11温度読込を行いました。 (DHT11のDATAピンをArduinoデジタルピン5に接続してパソコンとUSB接続)   
 





DHT11モジュール(プルアップ抵抗付)












参考サイト



プロジェクトの作成

【新しいプロジェクトの作成】
【Windows フォームアプリケーション (.NET Framework)】選択
【次へ】


【プロジェクト名】
【場所】
【作成】


デザイン
【ツールボックス】【SerialPort】を【form1】にドラッグ&ドロップします。



 
【SerialPort】プロパティを開いて
【DataReceiveed】【serialPort1_DataReceived】を選択
















【comboBox1】プロパティを開いて
【Items】
文字列コレクションに入力
COM2
COM3
COM4
COM5






【Button1】プロパティを開いて【Text】→【読込】に変更
【label1】プロパティを開いて【Text】→【SerialPort】に変更
【label2】プロパティを開いて【Text】→【message】に変更
【label3】プロパティを開いて【Text】→【温度】に変更


デバイスマネージャー
Arduino Nano接続ポートを調べる。


温度読込み
【SertalPort】COM3選択する
【読込】クリック
【温度】が表示













Arduino プログラム
#include <DHT.h>              // ライブラリのインクルード
int R_data = 0;
#define LED 13
#define DHT_PIN 5             // DHT11のDATAピンをデジタルピン5に定義
#define DHT_MODEL DHT11       // 接続するセンサの型番を定義する(DHT11やDHT22など)
DHT dht(DHT_PIN, DHT_MODEL);  // センサーの初期化 
void setup() {
  pinMode(LED,OUTPUT);
  Serial.begin(9600);
  dht.begin();                // センサーの動作開始
  digitalWrite(LED,LOW);
}
 
void loop() { 
  delay(1000);  // 通信用の待機時間
  if(Serial.available() > 0){ // シリアルポートにデータがあるかを確認
    R_data = Serial.read(); // データを読み込む
    if(R_data==65){         // パソコンから[読込]指示(”A”)
     digitalWrite(LED,HIGH);
     float Humidity = dht.readHumidity();          // 湿度の読み取り
     float Temperature = dht.readTemperature();    // 温度の読み取り(摂氏)
     if (isnan(Humidity) || isnan(Temperature)) {  // 読み取りのチェック
      Serial.println("ERROR");
      return;
  }
      Serial.print(Temperature);          
      digitalWrite(LED,LOW);
    }
  }
}

Visual Studio 2022 Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection.Emit;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (button1.Enabled)
            {
                serialPort1.PortName = comboBox1.SelectedItem.ToString(); // 選択されたCOMをポート名に設定
                serialPort1.Open(); // ポートを開く 
            }
        }

        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            try
            {
                string data = serialPort1.ReadExisting(); // ポートから文字列を受信する
                if (!string.IsNullOrEmpty(data))
                {
                    Invoke((MethodInvoker)(() => // 受信用スレッドから切り替えてデータを書き込む
                    {
                        label2.Text = data; // ラベルを受信した文字列へ変更
                        Thread.Sleep(1);
                        button1.Enabled = true; // ボタンを押せるようにしておく
                    }));
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            serialPort1.Write("A"); // ポートへ適当な文字列を書き込む
            button1.Enabled = false;    // ボタンを押した直後、利用不能にしておく
        }

        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void label3_Click(object sender, EventArgs e)
        {

        }
    }
}
     

0 件のコメント:

コメントを投稿

FST3253 - 直交ミキサ製作

製造終了のFST3253を検索中にアマゾンの口コミ(SDRトランシーバーに使用出来る)を見てFST3253MTCとピッチ変換基板を購入。FST3253 直交ミキサ基板を製作してPi Pico Rx-SDRで受信確認できました。  ●Pi Pico Rx  【 https://10...