Haberler

Adım Adım Eğitim: Çevresel verilerinizi toplamak için basit bir IoT çözümü

Herkesin kolayca inşa edebileceği adım adım bir öğretici.

Bu çağda, nerede olursanız olun çevrenizi takip etmenize yardımcı olabilecek birçok gözetim sistemi mevcut. Ancak, bu sistemlerin ana sorunu genellikle fiyatıdır. Sonuçta, internet erişimi, arama yapma ve çevrenin çeşitli parametrelerini takip etme gibi işlevlere sahip ekipmanlar oldukça karmaşıktır.

Peki, biri size bir öğrencinin bile böyle bir sistemi oluşturup çalıştırabileceğini söylese? Kesinlikle birçok kişi bunu bir şaka olarak bulur. Ama bu makalede, düşündüğünüzden çok daha kolay olduğunu göstereceğim.


Bu gönderinin ana fikri, sıradan şeylerin düşündüğünüzden daha karmaşık ve benzersiz durumlarda kullanılabileceğini göstermektir.

Burada bir örnek olarak bazı sıcaklık ve nem sensörleri kullanacağım ve kesinlikle herhangi bir modül, gösterildiği gibi aynı şekilde bağlanabilir.

Örneğin, yalnızca Grove Beginner Kit for Arduino var, bu da size sadece 30 dolara mal oluyor. Ancak, dahil edilen tüm sensörlere ihtiyacınız olmadığını düşünüyorsanız, yalnızca bir Grove portuna ihtiyacınız varsa 10 dolara bir Seeeduino Nano ve 6 dolara bir Grove Sıcaklık ve Nem Sensörü satın alarak kendinizi sınırlayabilirsiniz. Ayrıca, bir bilgisayara ihtiyacınız olacak (benim durumumda Windows, ancak teorik olarak C# her yerde çalışır). Ayrıca, ücretli (veya en azından ücretsiz) bir web sunucusuna da ihtiyaç vardır.

Neden? Çünkü örneğin, sıcaklık sensörünün üzerinde yatan bir kedinin verileri bir yerde görüntülenmelidir. Ve herkesin her zaman yanında taşıdığı cihaz nedir? Tabii ki, akıllı telefonlarımız. Ve hangi uygulama her zaman aktiftir ve sizi hızlı bir şekilde bilgilendirir? Tabii ki, mesajlaşma uygulamalarımız.

Ben Telegram‘ı seçtim çünkü bu benim ana mesajlaşma uygulamam ve ayrıca onun için bot yazmak çok basit.

Bunu inşa etmenin 4 ana adımı vardır:


1. Donanım

Seeeduino Lotus ile Sıcaklık ve nem sensörü

Burada her şey basit – sensörü Grove kablosu kullanarak DIGITAL porta bağlamamız yeterli. Hepsi bu.


2. Seeeduino yazılımı

Verileri bilgisayarın seri portuna USB üzerinden gönderecek bir şemaya ihtiyacımız var. Bu en basit seçenek.

İşte sizin için iyi yorumlanmış bir kod.

#include "DHT.h" //kütüphaneyi bağlama
#define DHTPIN 2 //değişken ayarlama
#define DHTTYPE DHT11 //tipimizi seçme
DHT dht(DHTPIN, DHTTYPE); //birleştirme

void setup() 
{
    SERIAL.begin(9600); //seri porta @9600 baud ile bağlanma
    Wire.begin(); //sensörü karta bağlama
    dht.begin(); //sensörü başlatma
}

void loop() 
{
    float temp_hum_val[2] = {0}; //2 öğeden oluşan dizi oluşturma
    if(!dht.readTempAndHumidity(temp_hum_val)){//eğer sensör çevrimiçi ise
        SERIAL.print("Nem: ");    //çıkış işareti
        SERIAL.print(temp_hum_val[0]); //veri çıkışı
        SERIAL.println("");            //ayırıcı
        SERIAL.print("Sıcaklık: "); //çıkış işareti
        SERIAL.print(temp_hum_val[1]); //veri çıkışı         
    }
    else{ //eğer sensör çevrimiçi DEĞİLSE
       SERIAL.println("Sıcaklık ve nem değerini almakta başarısız oldu."); // "oops" demek
    }
   delay(3600000); //BİR TAM SAAT bekleme (1000ms*60s*60m)
}

3. PC İstemci uygulaması

Benim için bu, tüm projedeki en zor kısım. Uzun zamandır Telegram‘da bot yazıyorum ve Arduino programlamasına aşinayım, ancak bu benim C# kullandığım ilk sefer. Komut satırından sunucuya nasıl bağlanacağım ve verileri Arduino IDE üzerinden değil, seri porttan nasıl alacağım benim için yeniydi. Hayır, muhtemelen tam tersi – önce verileri al ve sonra gönder))

İşte sadece bazı kodlar ve yorumlar. Kopyalamaktan, düzenlemekten, kullanmaktan çekinmeyin.

using System;
using System.IO.Ports;
using System.Threading;
using System.Net;
using System.IO;
namespace IoT
{
    class Program
    {
        static SerialPort _serialPort;
        public static void Main()
        {
            Console.WriteLine("Başlatıldı");//başlangıç mesajı
            Console.SetWindowSize(16, 1);//daha büyük bir pencereye ihtiyacım var mı? :D
            Console.SetCursorPosition(0, 0);//metni görmeliyiz
            _serialPort = new SerialPort();//başlatma
            _serialPort.PortName = "COM3";//portunuz değişebilir
            _serialPort.BaudRate = 9600;//haha, klasik
            _serialPort.Open();//dinle! dinle bunu!
            int i = 0;//artımlı bir sayaç yapalım
            while (true)//sonsuz, düşüncesiz
            {
                string a = _serialPort.ReadExisting();//bu bizim seeeduino'dan çıkan verimiz
                if (a != "")//her saniye istek yapmamalıyız, yalnızca yeni verimiz varsa
                {
                    string link = "https://projects.HumanZ.space/bots/bugbot/bot.php?seed=IoT&text=" + a;//nasıl çalıştığını görmek istersen bana sor
                    i++; //bağlantılar: bir tane daha
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(link);//gönderme
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();//onu kullanmıyoruz
                    Stream resStream = response.GetResponseStream();//bu da gereksiz
                    Console.Clear();//cls
                    Console.WriteLine("Bağlantılar: " + i + ".");//kullanıcıya hayatta olduğumuzu bildirin
                    Console.SetWindowSize(16, 1);//yine
                    Console.SetCursorPosition(0, 0);//yine
                }
                Thread.Sleep(1000);//1 s bekle
                
            }Console.ReadLine();//bir şekilde, bunun olmadan uygulamam çöküyor - ama VS bunun kötü bir kod olduğunu söylüyor(
        }
    }
}

4. Sunucu yazılımı

Bu bölümdeki sorun, bir botun inşasını ve tam kodunu burada açıklamanın mantıklı olmamasıdır; internette bot oluşturma ile ilgili birçok kılavuz var ve bot hakkında bilgi muhtemelen makalenin yarısını kaplayacak, oysa işlevin kendisi sadece birkaç satır alıyor. Bu nedenle, burada sadece kısa bir alıntı göstereceğim. Bu arada, tamamen PHP ile yazdım ve hiçbir kütüphane kullanmadım.

$seed=$_REQUEST[seed];//ürün adını toplama
$text=$_REQUEST[text];//mesajı toplama
if($seed!=null&&$text!=null){//eğer her ikisine de sahipsen
    apiRequestJson("sendMessage", array('chat_id' => -1001329261925, "text" => "Отзыв из $seed:
$text"));//özel sohbetimize bir istek gönder
}

Öyleyse…

Eğer her şey doğruysa, kedi internet kablosunu kesmediyse ve ağdaki sunucu çalışıyorsa, seçilen kanala bir bildirim gelecektir. Görünümü şöyle:

Bilinmeyen metin için özür dilerim – bu Rusça. Benim dilim)

İşte birkaç ipucu. Kartı takmadan uygulamayı başlatmayın – hemen çöküyor. Ayrıca, uygulama aktifken karta yazılım yüklemeye çalışmayın – Arduino IDE bir hata verecektir, çünkü bu kanal meşguldür.

Son olarak – böyle projeler için güncelleme sıklığını yarım saatten daha sık ayarlamanızı tavsiye etmem. Sonuçta, kimse rahatsız edici bildirimler istemez, değil mi?

İlerlemeye devam edin, Yapımcılar!

Leave a Reply

Your email address will not be published. Required fields are marked *