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
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:
İş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!
