Mundarija:

Veb -interfeysi va video oqimi bilan malina tanki: 8 qadam (rasmlar bilan)
Veb -interfeysi va video oqimi bilan malina tanki: 8 qadam (rasmlar bilan)

Video: Veb -interfeysi va video oqimi bilan malina tanki: 8 qadam (rasmlar bilan)

Video: Veb -interfeysi va video oqimi bilan malina tanki: 8 qadam (rasmlar bilan)
Video: Excel pivot jadvallari noldan mutaxassisga yarim soat ichida + Boshqaruv paneli! 2024, Noyabr
Anonim
Veb interfeysi va video oqimi bilan malina tanki
Veb interfeysi va video oqimi bilan malina tanki

Qanday qilib men masofadan turib Internetni boshqarish va video oqimini boshqarish qobiliyatiga ega bo'lgan kichik WiFi tankini amalga oshirganimni ko'ramiz.

Bu elektron va dasturiy dasturlash bo'yicha asosiy bilimlarni talab qiladigan o'quv qo'llanma bo'lishi uchun mo'ljallangan. Shuning uchun men tank shassi to'plamini tanladim (uni 3D printer yordamida chop etish o'rniga, keyinchalik yangilanish bo'lishi mumkin) va jami 6 ta komponent, shu jumladan batareyalar. Dasturiy ta'minotni o'rnatish jarayonini bosqichma -bosqich kuzatib borishingiz mumkin va dasturlash minimal darajada saqlanadi, malinali narsalar haqidagi asosiy bilimlar yordam berishi mumkin.

Men 0 dan tayyor tankgacha 12 soat ishlaganman. Barcha komponentlar uchun umumiy qiymati 70 €.

1 -qadam: BOM

BOM
BOM
BOM
BOM
BOM
BOM
BOM
BOM

1 - DIY RC robot shassis tanki - 32 (€)

www.banggood.com/DIY-RC-Robot-Chassis-Tan…

1 - ikki kanalli L298N shahar motorli haydovchi platasi - 1, 39 (€)

www.banggood.com/Dual-Channel-L298N-DC-Mo…

1 - Raspberry Pi Zero W boshlang'ich to'plami - 26 (€)

amzn.eu/1ugAaMP

1 - 16 Gb SD -karta - 5, 50 (€)

www.gearbest.com/memory-cards/pp_337819.h…

1 - Raspberry Pi 5MP Kamera modulli nol modeli uchun veb -kamera - 8 (€)

www.gearbest.com/raspberry-pi/pp_612249.h…

1 - Quvvat banki 5V

1 - 9V batareya

Aralash Breadboard kabeli Dupont ulagichi

Malinani sozlash uchun sichqoncha, klaviatura, monitor yoki televizor (ixtiyoriy, faqat birinchi sozlashni osonlashtirish uchun)

2 -qadam: Asosiy komponentlarning xususiyatlari

Dvigatel

JGA25-370 DC tishli motor

Ushbu dvigatel D shaklidagi chiqish miliga ega.

Xususiyatlar

· Ishlash kuchlanishi: 6 V dan 18 V gacha

· Nominal kuchlanish: 12 V

· 12 V: 399 aylanish / min tezlikda erkin ishlash

· 12 V: 50 mA erkin oqim

· 12V da to'xtash oqimi: 1200 mA

· 12V da to'xtash momenti: 2,2 kg sm

· Vites tezligi: 1:21

· Redüktör o'lchami: 19 mm

· Og'irligi: 84 g

Ikki kanalli L298N shahar motorli haydovchi platasi

Ikkita H-ko'prikli dvigatel haydovchisi, ikkita shahar motorini yoki 4 simli ikki fazali step motorini boshqarishi mumkin. Dvigatel to'xtash joyidan himoya qilish uchun o'rnatilgan TSD.

Xususiyatlar

· Modul besleme zo'riqishi: shahar 2V-10V

· Signal kirish voltaji: shahar 1.8-7V

· Yagona ish oqimi: 1,5A

· 2,5A gacha bo'lgan eng yuqori oqim

· Kutish oqimi past (0,1uA dan kam)

· O'rnatilgan umumiy o'tkazgich sxemasi, kirish terminali bo'sh, vosita ishlamayapti

Hajmi: 24,7 x 21 x 7 mm

3 -qadam: simlarni ulash

Ulanish
Ulanish
Ulanish
Ulanish

Bu oxirgi kabel bo'ladi, lekin biz kutishimiz kerak, biz o'rnatishdan oldin

dasturiy ta'minot va uni oddiy simlar yordamida sinab ko'rish yaxshidir, tayyor bo'lganda bu erga qaytadi.

Bizga ikki xil quvvat manbai kerak, biri motor uchun, ikkinchisi esa malina uchun.

Dvigatelli ikki kanalli L298N dvigatel drayveri platasi (maksimal kirish voltaji DC 2V-10V) 9V batareya bilan quvvatlanadi va Raspberry Pi 5V USB akkumulyatoridan foydalanadi.

Dvigatel haydovchisining GND pimi minus batareyaga va Raspberry Pi (GND) ga ulanadi. Raspberry Pi -ning GPIO pinlari motor drayveriga stol sifatida ulangan.

4 -qadam: Raspberriga tayyorgarlik ko'rish O. S

Bu Raspbian operatsion tizimi uchun standart o'rnatish

Internetda qidirishning ko'plab batafsil qo'llanmalari, asosan qadamlar:

1. iso RASPBIAN STRETCH -ni DESKTOP bilan https://www.raspberrypi.org/downloads/raspbian/ saytidan yuklab oling.

2. 16 GB hajmli SD -kartani formatlang, men SD Formatter -dan foydalanganman

3.. IMG faylini yozing, men Win32DiskImager -dan foydalanganman

Endi sizning malina yuklashga tayyor, uni USB quvvat manbaiga (5V, 2A) ulang va birinchi yuklashni sozlashga tayyorlaning. Siz buni sichqoncha, klaviatura va monitor kabi tashqi qurilmalar yordamida yoki shaxsiy kompyuteringiz va Raspberry -ga masofaviy ulanish yordamida ikki yo'l bilan qilishingiz mumkin. Bu borada juda ko'p qo'llanmalar mavjud, ulardan biri:

5 -qadam: WIFI TANKIMIZNI NODE. JS VA WEBSOCKET. IO bilan qanday nazorat qilish kerak

WIFI TANKIMIZNI NODE. JS VA WEBSOCKET. IO bilan qanday nazorat qilish kerak
WIFI TANKIMIZNI NODE. JS VA WEBSOCKET. IO bilan qanday nazorat qilish kerak

Endi bizda Raspberry mikrokompyuterining yangi o'rnatilishi bor, u o'z ishini bajarishga tayyor, shuning uchun … biz tankga buyruq berish uchun nima ishlatamiz?

Python - bu Rapsberry loyihasini ishga tushirish uchun ishlatiladigan juda oson ishlatiladigan til, uni Rapsberry kirish va chiqish pinlari (GPIO) bilan o'zaro aloqada ham ishlatish mumkin

Ammo, mening maqsadim-oddiy veb-brauzer yordamida har qanday qurilmadan (kompyuter, mobil telefon, planshet …) o'z tank wi-fi-ni ulash va undan video uzatish. Python -ni hozircha unuting va NODE. JS va SOCKET. IO -ga o'tishga ruxsat bering.

NODE.js

Node.js (https://github.com/nodejs/node/wiki) - bu js tiliga asoslangan ochiq manba kodli server ishi. Men Raspberry Pi Zero (ARMv6 CPU) dan foydalanayotganim uchun biz avtomatik o'rnatish jarayonidan foydalana olmaymiz (ARMv7 CPU uchun mo'ljallangan) va biz buni qo'lda qilishimiz kerak:

Nodejs -ni mahalliy sifatida yuklab oling (men ARMv6 uchun 7.7.2 versiyasini ishlatganman, boshqa versiyalarni bu erda tekshiring

pi@malina: ~ $ wget

nodejs.org/dist/v7.7.2/node-v7.7.2-linux-…

Ish tugagandan so'ng, siqilgan faylni chiqarib oling:

pi@malina: ~ $ tar -xzf tugun-v7.7.2-linux-armv6l.tar.gz

Fayllarni /user /local -ga nusxalash va o'rnatish

pi@malina: ~ $ sudo cp -R node-v7.7.2-linux-armv6l/*/usr/local/

Nodejs o'rnatiladigan joyni yo'lga qo'shing, ".profile" faylini tahrir qiling:

pi@malina: ~ $ nano ~/.profile

Fayl oxiriga quyidagi qatorni qo'shing, saqlang va chiqing

PATH = $ PATH:/usr/local/bin

Yuklab olingan faylni o'chirib tashlang:.

pi@malina: ~ $ rm ~/node-v7.7.2-linux-armv6l.tar.gz

pi@malina: ~ $ rm -r ~/node-v7.7.2-linux-armv6l

Nodejs o'rnatilishini tekshirish uchun quyidagi buyruqlarni kiriting:

pi@malina: ~ $ tugun -v

pi@malina: ~ $ npm -v

Siz javob sifatida v7.7.2 va v4.1.2 ni o'qishingiz kerak.

Agar hamma narsa yaxshi bo'lsa, nodejs fayllarini joylashtirish uchun yangi papka yarating:

pi@malina: ~ $ mkdir nodehome

Yangi papkaga o'ting:

pi@malina: ~ $ cd nodehome

GPIO -ni eng oddiy usulda boshqarish uchun zarur bo'lgan qo'shimcha modulni o'rnating: ON va OFF:

pi@ahududu: ~ $ npm o'rnatish off

Endi bizning birinchi "Blink.js" loyihamizni sinab ko'rish vaqti keldi, natijada LED yonadi

pi@malina: ~ $ nano blink.js

Quyidagi kodni joylashtiring, saqlang va chiqing:

var Gpio = talab ("o'chirish"). Gpio; // o'chirishni o'z ichiga oladi

var LED = yangi Gpio (3, 'chiqish'); // GPIO 3 dan foydalaning

var blinkInterval = setInterval (miltillovchi LED, 250);

// LED har 250 miltida miltillaydi

blinkLED () {// funksiyasi miltillay boshlaydi

agar

(LED.readSync () === 0) {// holat 0 (yoki o'chirilgan) bo'lsa, pin holatini tekshiring

LED.writeSync (1);

// pin holatini 1 ga o'rnating (LEDni yoqing)

} boshqa {

LED.writeSync (0);

// pin holatini 0 ga qo'ying (LEDni o'chiring)

}

}

endBlink () {// funktsiyasi miltillashni to'xtatish uchun

clearInterval (blinkInterval); // miltillovchi intervallarni to'xtating

LED.writeSync (0); // LEDni o'chiring

LED.unexport (); // GPIO -ni bo'sh manbalarga eksport qilish

}

setTimeout (endBlink, 5000); // 5 soniyadan keyin miltillashni to'xtating

Sxemada ko'rsatilgandek LED, rezistorni (200 ohm) ulang va loyihani ishga tushiring:

pi@malina: ~ $ tugun blink.js

Tugun tayyor.

SOCKET. IO

WebSocket - bu kompyuter bilan aloqa protokoli, TCP ulanishiga asoslangan bo'lib, u dasturchi bilan server va mijoz yaratishni ta'minlaydi. Mijoz serverga ulanadi va serverga va undan xabarlarni chiqaradi va oladi. Node.js uchun WebSocket ilovasi Socket.io deb nomlanadi (https://socket.io/).

Socket.io -ni o'rnating:

pi@malina: ~ $ npm socket.io -ni o'rnating

Oldindan yaratilgan nodejlar uyiga o'ting:

pi@malina: ~ $ cd nodehome

Va yangi "umumiy" papkasini yarating:

pi@malina: ~ $ mkdir ommaviy

Yangi namunali veb -server yarating va uni "webserver.js" deb nomlang.

pi@malina: ~ $ nano webserver.js

Quyidagi kodni joylashtiring, saqlang va chiqing:

var http = talab ('http'). createServer (ishlovchi); // http serveriga ehtiyoj bor va funktsiyani ishlov beruvchi yordamida server yaratish ()

var fs = talab ('fs'); // fayl tizimi modulini talab qiladi

http. tinglang (8080); // 8080 portini tinglang

funktsiya ishlovchisi (req, res) {// server yaratish

fs.readFile (_ dirname + '/public/index.html', funktsiya (xato, ma'lumotlar) {// o'qish

umumiy papkada index.html fayl

agar (xato) {

res.writeHead (404, {'Kontent turi': 'matn/html'}); // xato ko'rsatilganda 404 ko'rsatiladi

qaytish res.end ( 404 Yo'q

Topildi );

}

res.writeHead (200, {'Kontent turi': 'matn/html'}); // HTML yozing

res.write (ma'lumotlar); // ma'lumotlarni yozish

index.html dan

qaytish res.end ();

});

}

Bu veb -server sizning Raspberry 8080 portingizni tinglaydi va uni bog'laydigan har qanday veb -mijozga fayl beradi. Endi biz o'z mijozlarimizga joylashtiradigan va taqdim etadigan biror narsa yaratishimiz kerak: "umumiy" papkaga o'ting: pi@ahududu: ~ $ cd public

Yangi "index.html" html faylini yarating:

pi@malina: ~ $ nano indeks.html

"HelloWorld.txt" biriktirilgan kodini joylashtiring, saqlang va chiqing.

Nodejs "nodehome" jildiga o'ting:

pi@malina: ~ $ cd nodehome

HTTP veb -serverini ishga tushiring:

pi@malina: ~ $ node webserver.js

Veb -saytni https:// Raspberry_IP: 8080/yordamida brauzerda oching (Raspberry_IP -ni IP -ga almashtiring)

6 -qadam: VIDEO STREAMING QO'ShIMChASINI QO'ShISH

Raspberry -da video oqimini amalga oshirishning eng oson yo'li bor

Men hozirgacha topdimki, bu ajoyib ishlash va veb -interfeysga qo'shilish Migel Mota loyihasiga asoslanadi:

miguelmota.com/blog/raspberry-pi-camera-bo…

Rahmat Migel! Uning blogida bu qadamlar:

Libjpeg8 va cmake komponentlarini o'rnating:

pi@malina: ~ $ sudo apt-get libjpeg8 ni o'rnating

pi@malina: ~ $ sudo apt-get libjpeg8-dev ni o'rnating

pi@malina: ~ $ sudo apt-get install cmake

Raspicam plagini bilan mjpg-streamer-ni yuklab oling:

pi@malina: ~ $ git klon

github.com/jacksonliam/mjpg-streamer.git ~/mjpg-streamer

Katalogni o'zgartirish:

pi@malina: ~ $ cd ~/mjpg-streamer/mjpg-streamer-eksperimental

Kompilyatsiya:

pi@malina: ~ $ hammasini tozalang

Eski mjpg-streamer-ni almashtiring:

pi@malina: ~ $ sudo rm -rf /opt /mjpg -streamer

pi@malina: ~ $ sudo mv ~/mjpg-streamer/mjpg-streamer-tajriba

/opt/mjpg-oqimi

pi@malina: ~ $ sudo rm -rf ~/mjpg -streamer

Yangi "start_stream.sh" faylini yarating, biriktirilgan "start_stream.txt" faylidan nusxa ko'chiring va joylashtiring.

Uni bajariladigan qilib qo'ying (qobiq skriptlarini yarating):

pi@malina: ~ $ chmod +x start_stream.sh

Oqim serverini ishga tushiring:

pi@malina: ~ $./start_stream.sh

Veb -saytni https:// Raspberry_IP: 9000 yordamida brauzerda oching (Raspberry_IP -ni IP -ga almashtiring)

7 -qadam: TANK DASTURI

Hammasi tayyor, endi biz tankni boshqarish uchun veb -sahifamizni yaratishimiz kerak (index.html) va bizning buyruqlarimizni tinglash uchun veb -serverimiz (webserver.js). Shunday qilib, hozirgacha ko'rilgan fayllarni (faqat tizimni sinab ko'rish uchun misollar) biriktirilgan webserver.txt va index.txt bilan almashtiring.

8 -qadam: XIZMATNI NAZORAT ETISH VA STREAMING XIZMATINI BOSHLASH

ISHLAB CHIQARISH VA STREAMING XIZMATINI BOSHLASH
ISHLAB CHIQARISH VA STREAMING XIZMATINI BOSHLASH

Xizmatlarni ishga tushirish uchun ikkita terminal oynasini oching va quyidagi buyruqlarni bajaring:

tugun nodehome/webserver.js

./nodehome/start_stream.sh

Veb -saytni https:// Raspberry_IP: 8080 yordamida brauzerda oching (Raspberry_IP -ni IP bilan almashtiring)

Tavsiya: