IoT ve C# – Oda sıcaklıklarını , nemini ve ışık şiddetini ölçüp veritabanına kayıt etmek

Fri, Jun 16, 2017 2-minute read

Bu yazımızda nesnelerin interneti dünyasından arduino ve esp-01 wifi modülü ile ölçümler yapıp , bu ölçümleri C# yardımıyla veritabanına kayıt ediyoruz.

Arduino , sıcaklık ve nem sensörleri kullanarak 2 farklı lokasyondaki sıcaklıkları , nemi ve ışık şiddetini belirli aralıklarla kayıt edip SQL Server 2014 DB’ye kayıt eden bir program yapıyoruz.

Öncelikle Arduino ile ilgili kısımları yapıyoruz.

(–Eklenecek–)

Kullanacağımız veritabanını ve tabloları oluşturuyoruz.

Burada KontrolDB adında bir veritabanı oluşturuyoruz. Daha sonra odaları ve tanımlarını alıyoruz. Ölçümlerin yapıldığı ve aktarılması için ‘valuesroom’ adlı tabloya aktarım zamanıyla beraber kayıt ediyoruz.

Hangi odanın hangi aralıklarda kaç derece olduğunu gibi sorguları Views adı altında oluşturup programımıza ekliyoruz.

use master
go
create database KontrolDB
go
use KontrolDB
go
create table rooms
(
id int primary key identity(1,1),
descp nvarchar(30)
)
go
create table valuesroom
(
id int primary key identity(1,1),
roomid int foreign key rooms(id),
heat tinyint not null,
moisture tinyint not null,
lightdegree int not null,
calcdate datetime default(getdate())
)

Programımız temelde 2 formdan oluşmakta. İlk form bilgisayara bağlı seri port işlemleri için diğer form geçmiş ölçüm istatistikleri için kullanılmakta.

Her iki formda da veritabanına bağlantımız için bu satırı kullanıyoruz.

SqlConnection baglanti =
       new SqlConnection(@"Data Source=User\SQLEXPRESS;Initial Catalog=KontrolDB;Integrated Security=True");

Arduinonun bağlı olduğu port için okuma yapmamız gerekiyor. Burada COM3 portu kullanıldı.

serialPort1.PortName = "COM3";
            baglanti.Open();
            serialPort1.Open();
                //ısı 1 - nem 2 - ışık şiddeti 3
                string[] degerler = new String[3];
                serialPort1.Write("1");
                Double isi = Convert.ToDouble(serialPort1.ReadExisting());
                label2.Text = label2.Text + " " + isi.ToString() + "C";
                degerler[0] = Convert.ToString(isi);
                serialPort1.Write("2");
                Double nem = Convert.ToDouble(serialPort1.ReadExisting());
                label3.Text = label3.Text + " %" + nem.ToString() + "";
                degerler[1] = Convert.ToString(nem);
                serialPort1.Write("3");
                Double isik = Convert.ToDouble(serialPort1.ReadExisting());
                label3.Text = label3.Text + " " + isik.ToString() + "";
                degerler[2] = Convert.ToString(isik);

Daha sonra degerler dizisini yukarıda oluşturduğumuz veritabanına kaydediyoruz.

Sorguyu execute etmek için bu satırı kullandım.

SqlCommand komut = new SqlCommand(sorgu, baglanti);
            komut.ExecuteNonQuery();

Çalıştırdığımızda usb bağlantısını seçersek bu görüntüyü elde ediyoruz.