Visual Studio 2022 C# Windowsアプリを作成してArduino DHT11温度読込を行いました。 (DHT11のDATAピンをArduinoデジタルピン5に接続してパソコンとUSB接続)
●同ブログ関連記事【Visual Studio 2022 Community C# セットアップ】
DHT11モジュール(プルアップ抵抗付)
参考サイト
●渥美剛史
●金澤ソフト設計
プロジェクトの作成
【新しいプロジェクトの作成】
【Windows フォームアプリケーション (.NET Framework)】選択
【次へ】
【プロジェクト名】
【場所】
【場所】
【作成】
デザイン
【ツールボックス】【SerialPort】を【form1】にドラッグ&ドロップします。【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 件のコメント:
コメントを投稿