Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

WiFi IR Blaster

Komponen dan persediaan

Espressif ESP8266 ESP-01
Anda dapat melakukannya dengan ESP8266 standar atau kit pengembangan NodeMCU
× 1
Arduino Nano R3
× 1
NPN Transistor Serbaguna
× 1
LED IR Adafruit
× 1

Alat dan mesin yang diperlukan

Besi solder (generik)

Aplikasi dan layanan online

Arduino IDE
Firmware NodeMCU

Tentang proyek ini

Dua Langkah Maju...

Sepertinya produsen ponsel besar menjauh dari blaster IR bawaan, jadi saya mencari cara untuk membuktikan perangkat "bodoh" saya di masa depan yang saat ini tidak terintegrasi dengan infrastruktur IoT saya. Saya memiliki rumah pintar berjaringan mesh, tetapi saya perlu menemukan remote fisik untuk menyalakan TV saya? Harus ada cara yang lebih baik.

Baru-baru ini saya membuat IR blaster yang mengontrol AC yang berdiri sendiri di rumah saya dan proyek lain sebelumnya adalah ventilasi HVAC yang terhubung dengan aplikasi web yang terhubung dengan Android. Pada dasarnya, yang perlu saya lakukan adalah menggabungkan dua hal ini menjadi blaster IR yang terhubung ke web dengan frontend aplikasi web sehingga saya dapat menekan tombol di ponsel saya dan mengirim sinyal IR ke pusat media saya. Ini dapat diterapkan di setiap ruangan dan dikontrol di mana saja dari satu antarmuka, sehingga aplikasi untuk ini sangat luas.

Pembuatan Prototipe Cepat

Saya mengambil beberapa perangkat keras yang tidak digunakan dan menyambungkan semua yang saya perlukan untuk terhubung ke WiFi saya, menerima koneksi HTTP, dan mengirim sinyal IR.

Ini berfungsi dengan baik karena saya dapat meminta URL tertentu pada IP yang ditetapkan untuk ESP8266 dan membuat Arduino mengeluarkan sinyal "Daya" ke LED IR. Saya hanya perlu mencari tahu di mana harus meng-host aplikasi web, meminta yang mengirim URL ke blaster IR dan kemudian meminta permintaan tersebut diuraikan menjadi kode IR tertentu. Ini sangat membosankan untuk dilakukan menggunakan perintah AT dengan ESP8266, dan ada sesuatu yang menyebabkan penundaan 1-2 detik antara mengirim permintaan dan LED berkedip.

NodeMCU

Saya melanjutkan dengan papan dev NodeMCU ESP8266 karena memiliki regulasi daya terpasang, antarmuka USB ke serial, dan banyak pin I/O dalam paket kecil ini (juga ramah papan tempat memotong roti). Ternyata sudah ada pustaka ESP8266 WebServer yang menerima permintaan GET yang dapat saya adaptasi untuk mengirim kode IR dan pustaka IRremote biasa berfungsi di luar kotak.

ESP8266 pada NodeMCU tidak cukup kuat untuk meng-host aplikasi web itu sendiri, jadi saya akan menjalankannya pada C.H.I.P. $9 komputer yang sudah berjalan ke jaringan rumah saya. Keterbatasan lain adalah bahwa ESP8266 adalah papan 3.3v, jadi LED IR yang digerakkan langsung dari pin I/O sangat redup dan harus berada tepat di sebelah alat yang mengirim sinyal. Saya malah menggunakan pin I/O untuk menggerakkan transistor npn untuk menghidupkan/mematikan tegangan suplai 5v.

istirahat... ish

Setelah melakukan riset, saya menemukan tutorial yang bagus untuk mengimplementasikan REST API untuk Arduino untuk mengontrol LED pada adafruit. Saya menggunakan file JavaScript dan PHP mereka untuk mengirimkan permintaan cURL dan memuatnya di CHIP yang sudah menjalankan Apache tetapi dapat dengan mudah di-host di cloud. Setelah membuat halaman HTML dasar untuk kendali jarak jauh, saya menambahkan file manifest.json dan ikon sehingga dapat dijalankan sebagai aplikasi web asli di ponsel Android.

Di sisi Arduino, saya memangkas server web untuk hanya menerima permintaan GET, mengurai URL, mengirim 200 OK, lalu memutuskan sambungan. Berdasarkan URL, Arduino akan mengirimkan kode IR yang dipetakan ke tombol yang ditekan.

Remonster Universal

Semuanya bekerja dengan sempurna tanpa penundaan. Saya menemukan bahwa LED IR yang saya gunakan memiliki sudut yang sangat sempit, jadi saya harus berhati-hati agar diarahkan dengan benar. Beberapa velcro industri memungkinkan saya memasangnya di bawah rak, tidak terlihat, dan memastikannya tetap mengarah ke penerima IR di ujung yang lain. Saya menambahkan beberapa kabel pengukur tebal ke kabel LED sehingga bisa disetel dengan baik.

Memiliki resistor untuk LED IR menyebabkannya hampir tidak dapat digunakan, sehingga transistor memberi daya pada 5v yang tidak diatur. Ini memungkinkan saya untuk memantulkan IR dari dinding dan memasang blaster di seberang ruangan, tetapi pasti akan berpengaruh pada umur panjang. Saya berharap karena mereka sangat jarang digunakan dan sinyal IR adalah pulsa super pendek (siklus tugas lebih rendah daripada kebanyakan sinyal PWM redup) saya tidak perlu mengganti LED untuk beberapa waktu. Saya memastikan untuk memesan beberapa LED IR sudut lebar dan keluaran lebih tinggi untuk versi 2, jadi ketika ini akhirnya mati, saya akan menggantinya bersama dengan resistor inline.

Pembaruan 3 Bulan dan Fitur Masa Depan

Saya menggunakan ini setiap hari dan itu bekerja dengan sempurna. Saya bahkan telah menambahkan perangkat kedua di ruang keluarga kami untuk mengontrol unit AC jendela dan TV lainnya.

Rencana untuk masa depan:

  • Migrasikan UI web ke layanan awan
  • Terintegrasi dengan Amazon Echo untuk perintah suara (Selesai)
  • Iterasi perangkat keras berikutnya juga akan memiliki sensor suhu DHT22 dan saya sedang mencari cara untuk mengirimkan RF untuk kipas langit-langit saya
  • Tambahkan penerima IR untuk fitur pembelajaran sehingga Anda dapat "mengajarkan" perintah blaster IR dari remote yang ada
  • Terintegrasi dengan otomatisasi/keamanan rumah saya untuk mematikan peralatan saat tidak digunakan

Blaster IR kecil yang terhubung ini perlahan mengisi celah antara rumah pintar dan peralatan lama saya.

Kode

  • WiFi IR Blaster untuk ESP8266 Arduino Sketch
  • script.js
  • index.html
  • curl.php
  • manifest.json
WiFi IR Blaster untuk ESP8266 Arduino SketchC/C++
Anda memerlukan perpustakaan wifi ESP8266 dan IRremote.h. Anda juga harus memilih untuk tidak menggunakan kode IR Mentah jika remote Anda didukung di perpustakaan. Saya mengadaptasi sketsa ini dari pengontrol AC yang saya buat yang menggunakan kode IR non-standar.
/* * WiFi IR Blaster oleh Buddy Crotty * Gunakan modul ESP8266 atau papan dev untuk menerima permintaan HTTP GET * lalu kirim kode IR ke LED IR terpasang berdasarkan permintaan tersebut. * Ini berfungsi paling baik dengan server web lain yang bertindak sebagai ujung depan yang * mengirimkan permintaan cURL berdasarkan tombol mana yang ditekan. * format cURL:http://ESP8266/IRcode */#include #include #include const char* ssid ="AP_SSID";const char* password ="AP_Pass ";MDNSResponder mdns;int khz =38; // Frekuensi pembawa 38kHz untuk NEC dan SamsungIRsend irsend(4); //sebuah led IR terhubung ke GPIO4 (pin D2 pada NodeMCU) // Masukkan sinyal RAW IR untuk "TV Power"unsigned int irTVpwr[] ={4650,4250, 700,1550, 650,1550, 700,1550, 650,450 , 650,500, 600,500, 600,500, 600,550, 550,1700, 550,1650, 600,1650, 550,550, 600,500, 600,550, 550,550, 600,500, 600,550, 550,1650, 600,550, 550,550, 600,500, 600,550, 550,550, 600,500, 600 ,1650, 600,500, 600,1650, 550,1700, 550,1650, 600,1650, 550,1650, 600,1650, 600}; // SAMSUNG E0E040BF // Masukkan sinyal RAW IR untuk "Sumber TV" unsigned int irTVsrc[] ={4600,4300, 700,1550, 650,1550, 650,1600, 650,450, 650,450, 600,550, 550,550, 600,500, 600, 1650, 550,1650, 600,1650, 550,550, 600,500, 600,550, 550,550, 550,550, 600,1650, 550,550, 550,550, 600,500, 600,500, 600,550, 550,550, 600,500, 600,550, 550,1650, 550,1700, 550, 1650, 600,1600, 600,1650, 600,1600, 600,1650, 550}; // SAMSUNG E0E0807F // Masukkan sinyal RAW IR untuk "TV Mute" unsigned int irTVmute[] ={4650,4250, 700,1550, 650,1550, 700,1550, 650,450, 650,500, 600,500, 600,500, 600,500, 600, 1650, 600,1600, 600,1650, 550,550, 600,500, 600,550, 550,550, 600,500, 600,1650, 550,1650, 600,1650, 550,1650, 600,550, 550,550, 550,550, 600,500, 600,550, 550,550, 550,550, 600.500, 600.1650, 550.1650, 600.1650, 550.1650, 600}; // SAMSUNG E0E0F00F // Masukkan sinyal IR RAW untuk "Volume TV Turun" unsigned int irTVvdn[] ={4650,4250, 700,1550, 650,1550, 700,1550, 650,450, 650,450, 650,450, 600,550, 550,550, 600 ,1650, 550,1650, 550,1650, 600,550, 550,550, 550,550, 600,500, 600,500, 600,1650, 600,1600, 600,500, 600,1650, 550,550, 600,500, 600,500, 600,550, 550,550, 600,500, 600,1650 , 550.550, 550.1650, 600.1650, 550.1650, 600.1650, 550}; // SAMSUNG E0E0D02F // Masukkan sinyal RAW IR untuk "TV Volume Up" unsigned int irTVvup[] ={4600,4300, 650,1600, 650,1550, 650,1600, 600,500, 600,550, 600,500, 600,550, 550,550, 550 ,1700, 550,1650, 600,1650, 550,550, 600,500, 600,550, 550,550, 600,500, 600,1650, 600,1650, 550,1650, 600,550, 550,550, 600,500, 600,550, 550,550, 600,500, 600,550, 550,550, 600 ,1600, 600,1650, 600,1650, 550,1650, 600,1650, 600}; // SAMSUNG E0E0E01F // Masukkan sinyal RAW IR untuk "TV Channel Up" unsigned int irTVchup[] ={4650,4250, 700,1550, 650,1600, 650,1550, 650,500, 600,500, 600,500, 650,500, 600,500, 600 ,1650, 550,1650, 600,1650, 600,500, 600,500, 600,550, 550,550, 600,550, 550,550, 550,1650, 600,550, 600,500, 600,1650, 550,550, 600,500, 600,550, 550,1650, 600,550, 550,1650 , 600.1650, 600.500, 600.1650, 600.1600, 600.1650, 600}; // SAMSUNG E0E048B7 // Masukkan sinyal RAW IR untuk "Saluran TV Turun" unsigned int irTVchdn[] ={4600,4350, 650,1550, 650,1600, 650,1600, 600,500, 600,500, 600,550, 550,550, 600,550, 550 ,1650, 600,1650, 550,1700, 550,550, 550,550, 600,500, 600,550, 550,550, 600,500, 600,550, 550,550, 550,550, 600,1650, 600,500, 600,500, 600,550, 550,1650, 600,1650, 600,1650 , 550.1650, 600.550, 550.1650, 600.1650, 600.1650, 550}; // SAMSUNG E0E008F7 // Masukkan sinyal RAW IR untuk "Receiver Power" unsigned int irRECpwr[] ={9050,4350, 650,500, 600,1600, 600,500, 650,500, 600,1600, 600,550, 600,1600, 600,1650, 550,550, 600,500, 600,1600, 650,1600, 600,500, 600,1650, 600,1600, 600,500, 600,1650, 600,1600, 600,550, 600,1600, 600,500, 600,550, 600,1600, 600,1600, 650,500, 600,500, 600,1600, 650,500, 600,1600, 600,1650, 600,500, 600,500, 600}; // NEC 4B36D32C // Masukkan sinyal IR RAW untuk "Receiver Power On" unsigned int irRECpwrON[] ={9000,4400, 600,550, 600,1600, 600,500, 600,550, 600,1600, 600,500, 600,1600, 650,1600 , 600,1600, 600,500, 650,1600, 600,1600, 600,500, 650,1600, 600,1600, 600,500, 600,550, 600,500, 600,1600, 600,550, 600,500, 600,500, 650,500, 600,500, 600,1600, 650 ,1600, 600,500, 600,1600, 650,1600, 600,1600, 600,1600, 600,1600, 650}; // NEC 4BB620DF // Masukkan sinyal IR RAW untuk "Receiver Power Off" unsigned int irRECpwrOFF[] ={9000,4400, 600,550, 550,1650, 600,550, 550,550, 600,1650, 550,550, 600,1650, 550,1650 , 600.550, 550.550, 550.1650, 600.1650, 600.550, 550.1650, 600.1650, 550.550, 600.1650, 550.1650, 600.1650, 600.500, 600.550, 550.550, 600.1650, 550.550, 600.500 , 600.550, 550.550, 550.1700, 550.1650, 600.1650, 550.550, 600.1650, 550}; // NEC 4B36E21D // Masukkan sinyal RAW IR untuk "Receiver Mute" unsigned int irRECmute[] ={9000,4400, 650,450, 650,1600, 600,500, 600,500, 650,1600, 600,500, 600,1650, 600,1600, 600,1600, 650,500, 600,1600, 650,1600, 600,500, 600,1600, 650,1600, 600,500, 600,1650, 600,500, 600,1600, 650,500, 600,500, 600,500, 600,500, 650,500, 600,500, 600, 1600, 650,500, 600,1600, 600,1600, 650,1600, 600,1650, 600,1600, 600}; // NEC 4BB6A05F // Masukkan sinyal IR RAW untuk "Volume Penerima Turun" unsigned int irRECvdn[] ={9150,4250, 750,350, 700,1550, 700,400, 700,450, 650,1550, 700,450, 600,1600, 650,1600 , 600,1650, 600,500, 600,1650, 600,1600, 600,550, 600,1600, 600,1650, 600,500, 600,1650, 600,1600, 650,500, 600,500, 600,500, 650,500, 600,500, 600,500, 600,550, 600,500 , 600,1650, 600,1600, 600,1650, 600,1650, 600,1600, 600,1650, 600}; // NEC 4BB6C03F // Masukkan sinyal IR RAW untuk "Volume Penerima Naik" unsigned int irRECvup[] ={9050,4400, 650,500, 600,1600, 600,550, 600,500, 600,1650, 600,500, 600,1600, 650,1600 , 600,1600, 600,550, 600,1600, 600,1600, 650,500, 600,1600, 650,1600, 600,500, 600,550, 600,1600, 600,550, 600,500, 600,550, 600,500, 600,550, 600,500, 600,1600, 650,500 , 600,1600, 600,1650, 600,1600, 600,1650, 600,1600, 600,1600, 600}; // NEC 4BB640BF // Masukkan sinyal IR RAW untuk "Sumber Penerima CBL/SAT"unsigned int irRECsrc[] ={8950,4450, 600,500, 600,1650, 600,500, 600,500, 600,1650, 600,500, 600,1600, 600 ,1650, 600,1600, 600,550, 600,1600, 600,1650, 600,500, 600,1600, 600,1650, 600,500, 600,500, 600,1650, 600,1600, 600,1650, 600,500, 600,500, 600,500, 650,500 , 600.1600, 600.500, 600.550, 600,500, 600,1600, 600,1650, 600,1600, 600,1650, 600}; // NEC 4BB6708F// Buat instance dari server// tentukan port yang akan didengarkan sebagai server argumenWiFiServer(80);void setup() { Serial.begin(115200); penundaan (10); irsend.begin(); // Hubungkan ke jaringan WiFi Serial.println(); Serial.println(); Serial.print("Menghubungkan ke "); Serial.println(ssid); WiFi.begin(ssid, kata sandi); while (WiFi.status() !=WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi Terhubung"); // Mulai server server.begin(); Serial.println("Server HTTP Dimulai"); // Cetak alamat IP Serial.print("Alamat IP:"); Serial.println(WiFi.localIP()); if (mdns.begin("IRBlasterLR", WiFi.localIP())) { Serial.println("MDNS Responder Dimulai"); } Serial.println(); Serial.println();}void loop() { // Periksa apakah klien telah menghubungkan WiFiClient client =server.available(); if (!klien) { kembali; } // Tunggu sampai klien mengirimkan beberapa data Serial.println("klien baru"); while(!client.available()){ delay(1); } // Baca baris pertama permintaan String req =client.readStringUntil('\r'); Serial.println(permintaan); klien.flush(); // Cocokkan permintaan if (req.indexOf("/irTVpwr") !=-1){ irsend.sendRaw(irTVpwr, sizeof(irTVpwr) / sizeof(irTVpwr[0]), khz); Serial.println("IRreq irTVpwr terkirim"); } else if (req.indexOf("/irTVsrc") !=-1){ irsend.sendRaw(irTVsrc, sizeof(irTVsrc) / sizeof(irTVsrc[0]), khz); Serial.println("IRreq irTVsrc terkirim"); } else if (req.indexOf("/irTVmute") !=-1){ irsend.sendRaw(irTVmute, sizeof(irTVmute) / sizeof(irTVmute[0]), khz); Serial.println("IRreq irTVmute terkirim"); } else if (req.indexOf("/irTVvdn") !=-1){ irsend.sendRaw(irTVvdn, sizeof(irTVvdn) / sizeof(irTVvdn[0]), khz); Serial.println("IRreq irTVvdn terkirim"); } else if (req.indexOf("/irTVvup") !=-1){ irsend.sendRaw(irTVvup, sizeof(irTVvup) / sizeof(irTVvup[0]), khz); Serial.println("IRreq irTVvup terkirim"); } else if (req.indexOf("/irTVchup") !=-1){ irsend.sendRaw(irTVchup, sizeof(irTVchup) / sizeof(irTVchup[0]), khz); Serial.println("IRreq irTVchup terkirim"); } else if (req.indexOf("/irTVchdn") !=-1){ irsend.sendRaw(irTVchdn, sizeof(irTVchdn) / sizeof(irTVchdn[0]), khz); Serial.println("IRreq irTVchdn terkirim"); } else if (req.indexOf("/irALLpwr") !=-1){ irsend.sendRaw(irRECpwrON, sizeof(irRECpwrON) / sizeof(irRECpwrON[0]), khz); irsend.sendRaw(irTVpwr, sizeof(irTVpwr) / sizeof(irTVpwr[0]), khz); penundaan(2000); irsend.sendRaw(irRECsrc, sizeof(irRECsrc) / sizeof(irRECsrc[0]), khz); Serial.println("IRreq irALLpwr terkirim"); } else if (req.indexOf("/irRECpwr") !=-1){ irsend.sendRaw(irRECpwr, sizeof(irRECpwr) / sizeof(irRECpwr[0]), khz); Serial.println("IRreq irRECpwr terkirim"); } else if (req.indexOf("/irRECpwrON") !=-1){ irsend.sendRaw(irRECpwrON, sizeof(irRECpwrON) / sizeof(irRECpwrON[0]), khz); Serial.println("IRreq irRECpwrON terkirim"); } else if (req.indexOf("/irRECpwrOFF") !=-1){ irsend.sendRaw(irRECpwrOFF, sizeof(irRECpwrOFF) / sizeof(irRECpwrOFF[0]), khz); Serial.println("IRreq irRECpwrOFF terkirim"); } else if (req.indexOf("/irRECmute") !=-1){ irsend.sendRaw(irRECmute, sizeof(irRECmute) / sizeof(irRECmute[0]), khz); Serial.println("IRreq irRECmute terkirim"); } else if (req.indexOf("/irRECvdn") !=-1){ irsend.sendRaw(irRECvdn, sizeof(irRECvdn) / sizeof(irRECvdn[0]), khz); Serial.println("IRreq irRECvdn terkirim"); } else if (req.indexOf("/irRECvup") !=-1){ irsend.sendRaw(irRECvup, sizeof(irRECvup) / sizeof(irRECvup[0]), khz); Serial.println("IRreq irRECvup terkirim"); } else { Serial.println("permintaan tidak valid"); klien.berhenti(); kembali; } klien.flush(); // Kirim tanggapan ke klien //client.print(s); client.print("HTTP/1.1 200 Oke\r\n"); penundaan (1); Serial.println("Klien Terputus"); Serial.println(); // Klien benar-benar akan terputus // ketika fungsi kembali dan objek 'klien' dihancurkan}
script.jsJavaScript
javascript untuk webapp (memerlukan jquery)
// Berfungsi untuk mengirim perintah IR tombolfungsiKlik(clicked_id){ if (clicked_id =="irTVpwr"){ $.get( "curl.php", { room:"192.168.1.62" , tombol:"irTVpwr"} ); } if (clicked_id =="irTVsrc"){ $.get( "curl.php", { room:"192.168.1.62", button:"irTVsrc"} ); } if (clicked_id =="irTVmute"){ $.get( "curl.php", { room:"192.168.1.62", button:"irTVmute"} ); } if (clicked_id =="irTVvdn"){ $.get( "curl.php", { ruangan:"192.168.1.62", button:"irTVvdn"} ); } if (clicked_id =="irTVvup"){ $.get( "curl.php", { ruangan:"192.168.1.62", button:"irTVvup"} ); } if (clicked_id =="irTVchup"){ $.get( "curl.php", { room:"192.168.1.62", button:"irTVchup"} ); } if (clicked_id =="irTVchdn"){ $.get( "curl.php", { ruangan:"192.168.1.62", button:"irTVchdn"} ); } if (clicked_id =="irRECpwr"){ $.get( "curl.php", { room:"192.168.1.62", button:"irRECpwr"} ); } if (clicked_id =="irALLpwr"){ $.get( "curl.php", { room:"192.168.1.62", button:"irALLpwr"} ); } if (clicked_id =="irRECpwrON"){ $.get( "curl.php", { room:"192.168.1.62", button:"irRECpwrON"} ); } if (clicked_id =="irRECpwrOFF"){ $.get( "curl.php", { room:"192.168.1.62", button:"irRECpwrOFF"} ); } if (clicked_id =="irRECmute"){ $.get( "curl.php", { room:"192.168.1.62", button:"irRECmute"} ); } if (clicked_id =="irRECvdn"){ $.get( "curl.php", { room:"192.168.1.62", button:"irRECvdn"} ); } if (clicked_id =="irRECvup"){ $.get( "curl.php", { room:"192.168.1.62", button:"irRECvup"} ); } }
index.htmlHTML
HTML dasar untuk menampilkan tombol.
 



TV





     


Penerima





curl.phpPHP
script php untuk mengirim permintaan GET ke ESP8266
manifest.jsonJSON
Ini akan memungkinkan laman web berjalan sebagai aplikasi web asli di android.
{ "name":"WiFi Remote", "icons":[ { "src":"remote_icon_36.png", "sizes":"36x36" , "type":"image/png", "density":0.75 }, { "src":"remote_icon_48.png", "sizes":"48x48", "type":"image/png", "density" :1.0 }, { "src":"remote_icon_128.png", "sizes":"128x128", "type":"image/png", "density":1.0 }, { "src":"remote_icon_192.png" , "sizes":"192x192", "type":"image/png", "density":1.0 } ], "scope":"/remote/", "start_url":"/remote/index.html", "display":"layar penuh", "orientasi":"potret"}

Skema

Tidak ada yang benar-benar untuk itu, hanya daya dan satu pin yang terhubung ke transistor NPN untuk menggerakkan dua LED IR secara seri (tanpa resistor) dari tegangan suplai 5v. Jika Anda ingin menjalankan LED tambahan atau membutuhkan lebih sedikit penurunan tegangan dari sumber 3.3v, Anda dapat menggunakan NPN transistor untuk mengganti beberapa transistor PNP (satu per LED). Konfigurasi ini memungkinkan Anda untuk menggunakan LED sebanyak yang dapat disuplai oleh tegangan sumber Anda.

Proses manufaktur

  1. Kekurangan WiFi RTLS
  2. Teknologi Nirkabel Baru 2015
  3. Cara memasang server Web tertanam yang aman pada perangkat WiFi $3
  4. Komunikasi MQTT Antara NodeMCU dan Raspberry Pi 3 B+
  5. ROBOT WIFI RASPBERRY PI DIKONTROL DARI PONSEL PINTAR ANDROID
  6. Robot Terkendali Wifi Menggunakan Raspberry Pi
  7. Apa Itu Panggilan WiFi? Bagaimana Cara Kerjanya?
  8. IOT - Smart Jar Menggunakan ESP8266, Arduino dan Sensor Ultrasonik
  9. Smart Door Lock Menggunakan Halaman Login WiFi oleh Arduino &ESP8266
  10. Apa itu ledakan manik? Panduan untuk Peledakan Manik