Mundarija:
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-23 15:14
Men skripkachi sifatida har doim skripkada barmoqlarimni aniq ko'rsatadigan ilova yoki asbobni xohlardim. Ushbu loyiha bilan men buni qurishga harakat qildim. Garchi bu prototip va siz hali ham ko'p funktsiyalarni qo'shishingiz mumkin.
Men ESP32 va rPIni ajratishga harakat qildim, shuning uchun ESP32 ma'lumotlarini rPi -ga simsiz yuborishga majbur qildim. Bu, ehtimol, bu loyihadagi eng qiyin narsa.
Loyihaning oxirida kompyuteringizda hech narsa saqlanmasligi juda muhim, lekin u rPI yoki ESP32 -da.
1 -qadam: Materiallar va asboblar
Loyihaning o'ziga xos xususiyatlariga kirishdan oldin, biz bir nechta narsaga muhtojmiz.
- 4x chiziqli Softpot: barmoq holatini o'lchash uchun chiziqli potentsiometrlar (skripka 4 torli)
- ESP32: chiziqli yumshoq nuqtalardan ma'lumotlarni o'qish uchun ESP32 moduli.
- 4/4 skripka: chiziqli yumshoq nuqtalarni tepaga joylashtirish uchun skripka.
- SD -kartali Raspberry Pi: malina pi, u bizning ma'lumotlar bazamiz va veb -saytimizni saqlaydi.
- 10k potensiometr: LCD yorqinligi uchun potansiyometr
- LCD-displey: rPi-ning IP-manzillarini ko'rsatish uchun LCD displey
- Lehim to'plami: Barcha elementlarni almashtirish uchun
- Erkak-erkak simlari va erkak-ayol simlari: Barcha elementlarni ulash uchun kabellar
- Micro USB kabeli: ESP32 -ni quvvatlantirish uchun
2 -qadam: Softpots -ni ESP32 -ga ulash
Birinchidan, biz dasturiy ta'minotni esp32 ga ulashimiz kerak. Biz chap va o'ng pinlarni mos ravishda 5V va GND ga ulaymiz. Biz o'rta pinni ESP32 analog piniga ulaymiz. Shuningdek, biz o'rta pinni 10k ohm qarshilik bilan ulashimiz va uni GND ga ulashimiz kerak. Bu shuni anglatadiki, bizning yumshoq nuqtalarimiz tasodifiy qiymatni qaytarmaydi.
Keyin biz ESP32 -ni mikro usb kabeli bilan kompyuterga ulaymiz, shunda biz unga kod yuklay olamiz. Biz ESP32 dasturlash uchun Arduino IDE dan foydalanamiz. Lekin oldin biz yuklashimiz uchun ESP32 uchun Arduino yadrosini o'rnatishimiz kerak. Buni bu erda qilish mumkin.
Keyin biz kod yozishni boshlashimiz mumkin.
Birinchidan, biz pinlarni belgilashimiz kerak, ular bilan biz yumshoq punktlarning o'rta pinini bog'ladik.
const int SOFT_POT_PIN1 = 34;
const int SOFT_POT_PIN2 = 35;
const int SOFT_POT_PIN3 = 32;
const int SOFT_POT_PIN4 = 33;
uzoq vaqt imzolanmagan;
belgisiz uzun softPotTime;
Keyin biz pinlarni o'rnatishimiz mumkin. Va biz ketma -ket monitorni va vaqtimizni boshlashimiz kerak.
bo'sh o'rnatish () {
onTime = millis ();
Serial.begin (115200);
Serial.println ("Dasturning boshlanishi");
pinMod (SOFT_POT_PIN1, INPUT);
pinMod (SOFT_POT_PIN2, INPUT);
pinMod (SOFT_POT_PIN3, INPUT);
pinMod (SOFT_POT_PIN4, INPUT); }
bekor ma'lumotlar (bayt pdata ) {
// Yumshoq idishning ADC qiymatini o'qing
Keyin biz o'z ma'lumotlarimizni olishimiz uchun pinlarimizni o'qishimiz kerak.
int softPotADC1 = analogRead (SOFT_POT_PIN1);
nt softPotADC2 = analogRead (SOFT_POT_PIN2);
int softPotADC3 = analogRead (SOFT_POT_PIN3);
int softPotADC4 = analogRead (SOFT_POT_PIN4);
Keyin biz qiymatlarni ro'yxatga kiritamiz, shunda biz keyinchalik uni osongina chiqarishimiz mumkin.
uchun (int i = 0; i <4; i ++) {
int Ismlar = {softPotADC1, softPotADC2, softPotADC3, softPotADC4};
int softpot = Ismlar ;
agar (softpot> 10) {
pdata [0] = i;
pdata [1] = dasturiy ta'minot;
pdata [2] = millis ();
} } }
}
3 -qadam: ESP32 va RPI -ni simsiz ulash
ESP32 va RPI -ni simsiz ulash uchun biz websocket deb nomlangan kutubxonadan foydalanamiz. Bu kutubxonani o'rnatish uchun biz fayllarni bu erdan olishimiz mumkin. Ushbu kutubxonani ESP32 uchun ishlatish uchun biz fayllarning o'zida ba'zi kodlarni o'zgartirishimiz kerak bo'ladi.
Biz MD5.c va MD5.h -ni o'zgartirishimiz kerak bo'ladi.
- MD5Initdan MD5InitXXXgacha
- MD5UpdateXXX ga yangilang
- MD5Finaldan MD5FinalXXXgacha
Sha1 fayllaridagi avr/io.h qatorlarini ham o'chirishimiz kerak bo'ladi.
Keyin biz kutubxonani Arduino IDE -ga eskiz orqali qo'shishimiz mumkin> kutubxonani qo'shish>. ZIP kutubxonasini qo'shish va keyin biz zip faylidagi kutubxonani tanlashimiz mumkin.
Shundan so'ng biz o'z kodimizni yozishni boshlashimiz mumkin.
ESP32 uchun birinchi:
Kutubxonamiz shu jumladan
#qo'shing #qo'shing
Bizning pinlarimiz yana tayinlanadi.
const int SOFT_POT_PIN1 = 34;
const int SOFT_POT_PIN2 = 35;
const int SOFT_POT_PIN3 = 32;
const int SOFT_POT_PIN4 = 33;
Wi -Fi serverimizni tayinlash
WiFiServer serveri (80);
Bizning veb -server serverimiz ishga tushirilmoqda
WebSocketServer veb -SocketServer;
SSID va Wi -Fi tarmog'ining parolini belgilash
const char* ssid = "sizning Wi -Fi SSID";
const char* password = "wifi parolingiz";
bo'sh o'rnatish () {
Seriyali monitorni sozlash
Serial.begin (115200);
Yumshoq nuqtalarni sozlash
pinMod (SOFT_POT_PIN1, INPUT);
pinMod (SOFT_POT_PIN2, INPUT);
pinMod (SOFT_POT_PIN3, INPUT);
pinMod (SOFT_POT_PIN4, INPUT);
Wi -Fi -ni ishga tushiring va unga ulaning
WiFi.begin (ssid, parol);
esa (WiFi.status ()! = WL_CONNECTED) {
kechikish (1000);
Serial.println ("Wi -Fi tarmog'iga ulanmoqda.."); }
Serial.println ("Wi -Fi tarmog'iga ulangan");
Serial.println (WiFi.localIP ());
server.begin (); kechikish (100); }
bo'sh ma'lumotlar (char *pdata) {
Ma'lumotlaringizni o'qish
// Yumshoq idishning ADC qiymatini o'qing
int softPotADC1 = analogRead (SOFT_POT_PIN1);
int softPotADC2 = analogRead (SOFT_POT_PIN2);
int softPotADC3 = analogRead (SOFT_POT_PIN3);
int softPotADC4 = analogRead (SOFT_POT_PIN4);
Ma'lumotlarni ro'yxatga joylashtirish va uni o'n oltilik tizimga o'tkazish.
sprintf (pdata, " %x, %x, %x, %x, %x", softPotADC1, softPotADC2, softPotADC3, softPotADC4, millis ());
}
void loop () {
Mijozni ulash (rPI)
WiFiClient mijozi = server.available ();
if (client.connected ()) {
kechikish (10);
agar (webSocketServer.handshake (mijoz)) {
Serial.println ("Mijoz ulandi");
Ma'lumotni yuborish va qabul qilish.
while (client.connected ()) {
char ma'lumotlari [30];
getdata (ma'lumotlar);
Serial.println (ma'lumotlar);
webSocketServer.sendData (ma'lumotlar);
kechikish (10); // Ma'lumotni to'g'ri qabul qilish uchun kechikish kerak}
Serial.println ("Mijoz uzildi");
kechikish (100); }
boshqa {
Serial.println ("shitsfuckedyo");
} } }
Keyin pythondagi rPI uchun:
Kutubxonalarimizni import qilish
veb -saytlarni import qilish vaqti
Dunyo miqyosidagi variabelni tayinlash i
i = 0
Biz qabul qila oladigan maksimal 200 ta xabarni sozlash
nrOfMessages = 200
sinf Websocket ():
def _init _ (o'zi):
Veb -soketni ishga tushirish va uni ESP32 -ga ulash
self.ws = websocket. WebSocket ()
self.ws.connect ("ws: //172.30.248.48/")
Ma'lumotlarimizni qabul qilish
def ish (o'z -o'zidan):
self.ws.send ("xabar nr: 0")
natija = self.ws.recv () time.sleep (0.5) qaytish natijasi
Hamma narsani olgandan keyin veb -rozetkani yopish
def close (o'zini):
self.ws.close ()
4 -qadam: veb -sayt va ma'lumotlar bazasini ulash
Ma'lumotlar bazasi va veb -saytni ulashga kelsak, siz birinchi navbatda mariadb: sudo apt install mariadb ni o'rnatish orqali ma'lumotlar bazasini pi -da yaratishingiz kerak bo'ladi.
Keyin unga kirishingiz mumkin: sudo mariadb.
Keyin siz ham o'z veb -saytingizni yaratishingiz kerak bo'ladi. Siz buni xohlaganingizcha qilishingiz mumkin, lekin siz Flask -dan foydalanishingiz kerak va sizning ma'lumotlaringizni to'xtatish va ishga tushirish uchun HTML -da shakl bo'lishi kerak.
Keyin siz ushbu kodni ma'lumotlar bazasi va veb -saytingizni ulash uchun kiritishingiz mumkin (veb -saytingiz ham, ma'lumotlar bazasi ham sizning pi -da bo'lishi kerak, buni pycharm sozlamalarida tarqatish yorlig'i yordamida amalga oshirish mumkin).
flaskext.mysql -dan MySQL -ni import qiling
app.config ["MYSQL_DATABASE_HOST"] = "mahalliy xost"
app.config ["MYSQL_DATABASE_DB"] = "ma'lumotlar bazangiz nomi"
app.config ["MYSQL_DATABASE_USER"] = "ma'lumotlar bazasi foydalanuvchisi"
app.config ["MYSQL_DATABASE_PASSWORD"] = "ma'lumotlar bazasi paroli"
Ma'lumotlar bazamizdan ma'lumotlarni olish funktsiyasi.
def get_data (sql, params = Yo'q):
ulanish = mysql.connect ()
kursor = ulanish. kursor ()
chop etish ("ma'lumotlarni olish")
harakat qilib ko'ring:
bosib chiqarish (sql)
cursor.execute (sql, parametrlar)
istisnolardan tashqari:
chop etish (e)
False qaytarish
natija = cursor.fetchall ()
ma'lumotlar =
natijada qator uchun:
data.append (ro'yxat (qator))
cursor.close ()
Conn.close ()
ma'lumotlarni qaytarish
Ma'lumotlar bazamizga ma'lumotlarni kiritish funktsiyasi
def set_data (sql, params = Yo'q):
ulanish = mysql.connect ()
kursor = ulanish. kursor ()
harakat qilib ko'ring:
log.debug (sql)
cursor.execute (sql, params) conn.commit ()
log.debug ("SQL uitgevoerd")
istisnolardan tashqari:
log.exception ("Favqulodda vaziyatlar: {0})" formati (e))
False qaytarish
cursor.close ()
Conn.close ()
To'g'ri qaytish
Yozuv paytida boshqa ishlarni bajarish uchun biz ham o'z ilovamizni to'ldirishimiz kerak bo'ladi.
sinf ThreadedTask (threading. Thread):
def _init _ (o'zi,):
Ipni sozlash
mavzu._ mavzu _ (o'z -o'zidan)
Qabul qilingan barcha ma'lumotlarni saqlash uchun ro'yxat tuzish
self.data_all =
def run (o'zini):
uyqu (5)
Ma'lumot oladigan o'z python kodingizni import qiling
import_websocket -ni import qilish
Ma'lumotlaringizni qabul qiling
w = qabul qilish_websocket. Websocket ()
Ma'lumotlaringizni ro'yxatga qo'shing va chop eting.
i uchun (0, 200):
self.data_all.append (w.work (). split (","))
chop etish (self.data_all)
vazifa = ThreadedTask ()
Keyin thread.ni ishga tushirish va ma'lumotlarni qabul qilishni boshlash uchun task.run () ni bajarishingiz mumkin.
5 -qadam: Hamma narsani bir -biriga ulash
Sizning veb -saytingizni Pi -dan boshqarish uchun siz xizmatdan foydalanishingiz kerak:
[Birlik] Tavsif = uWSGI misoli, Project1 veb -interfeysiga xizmat qiladi
= Tarmoqdan keyin maqsad
BindsTo = mysqld.service
Keyin = mysqld.service
[Xizmat]
Foydalanuvchiga o'zgartirish
Foydalanuvchi = pi
Guruh = www-ma'lumotlar
Bu erda siz Flask faylingiz katalogini kiritishingiz kerak
WorkingDirectory =/home/pi/project1/web
Ini faylingiz katalogini keyinroq topishingiz mumkin.
ExecStart =/usr/bin/uwsgi --ini /home/pi/project1/conf/uwsgi-flask.ini
[O'rnatish]
WantedBy = multi-user.target
uwsgi-flask.ini-ni yuqorida ExecStart-da ko'rsatilgan katalogga joylashtirishingiz kerak
[uwsgi] modul = veb: ilova virtualenv =/home/pi/project1/env
master = haqiqiy jarayonlar = 5
plaginlar = python3
soket = loyiha 1. paypoq chmod-soket = 660 vakuum = rost
muddati tugashi = rost
Endi siz ma'lumotlarni o'qishingiz va veb -saytingizda ko'rsatishingiz mumkin.
6 -qadam: Qo'shimcha: LCD ekranni ulash
Biz LCD ekranni ulashimiz mumkin, shunda biz veb-saytimiz uchun Pi-ning IP-manzilini ko'rsatamiz.
RPi. GPIO -ni GPIOimport vaqti sifatida import qilish
import buyruqlar
GPIO.cleanup ()
D0 = 22
D1 = 5
D2 = 6
D3 = 13
D4 = 19
D5 = 26
D6 = 20
D7 = 21
ro'yxat = [22, 5, 6, 13, 19, 26, 20, 21]
E = 24
RS = 23
sinf ekrani:
def _init _ (o'zi):
GPIO.setmode (GPIO. BCM)
self.setup ()
#Funktsiya to'plami self.stuur_instructie (0x3f) #Display self.stuur_instructie (0x0c) #On + kursor self.stuur_instructie (0x01) @staticmethod def setup (): GPIO.setup (ro'yxat, GPIO. OUT) GPIO.setup ([E, RS], GPIO. OUT)
def stuur_instructie (o'z -o'zidan, bayt):
GPIO. chiqish (E, GPIO. HIGH)
GPIO.output (RS, GPIO. LOW)
self.set_GPIO_bits (bayt)
vaqt. uxlash (0.005)
GPIO. chiqish (E, GPIO. LOW)
def stuur_teken (o'zini, char):
temp = ord (char)
GPIO. chiqish (E, GPIO. HIGH)
GPIO. chiqish (RS, GPIO. HIGH)
self.set_GPIO_bits (temp)
vaqt. uxlash (0.005)
GPIO. chiqish (E, GPIO. LOW)
def set_GPIO_bits (o'z -o'zidan, bayt):
i uchun (0, 8):
agar (bayt va (2 ** i)) == 0:
GPIO.output (ro'yxat , GPIO. LOW)
boshqa:
GPIO.output (ro'yxat , GPIO. HIGH)
def main ():
s = Ekran ()
teken = "Mahalliy IP -manzil:"
tekendagi xat uchun:
s.stuur_teken (xat)
teken2 = commands.getoutput ("ip addr show wlan0 | grep -Po 'inet / K [ d.]+'")
chop etish (teken2)
s.stuur_instructie (0xc0)
teken2 -dagi 2 -harf uchun:
s.stuur_teken (harf 2)
if _name_ == '_main_': #Bu yerdan boshlanadigan dastur
harakat qilib ko'ring:
asosiy ()
KeyboardInterruptdan tashqari:
o'tish
Keyin biz LCDni ishga tushirishda ishga tushirish uchun xizmat yaratishimiz mumkin.
Tavsiya:
ESP8266: 5 bosqichli Slack holatini yangilovchi
ESP8266 bilan Slack holatini yangilovchi: Agar siz Slack -dan uzoqdan ishlayotgan bo'lsangiz, ushbu loyiha sizning kuningizni biroz osonlashtirishga yordam beradi. Men sizga uni ESP8266 Wi -Fi kartasi yordamida qanday qurishni ko'rsataman. Yuqoridagi videoni o'tkazib yubormang, siz Slack -ni yangi ishlatganmisiz yoki hozirgina ishlatgansiz
Esp32 va Thingsio.ai platformasi yordamida haroratni o'lchash: 6 qadam
Esp32 va Thingsio.ai platformalaridan foydalangan holda haroratni o'lchash: Ushbu qo'llanmada men esp32 ishlab chiqarish platasida mavjud bo'lgan ichki harorat sensori yordamida atrofdagi haroratni o'lchashni tushuntiraman. esp32 -da yaqinlik sensori sifatida ishlatiladigan zal sensori kabi ko'plab o'rnatilgan sensorlar mavjud
Esp32 va Thingsio.ai platformasi yordamida tuproq namligini o'lchash: 6 qadam
Esp32 va Thingsio.ai platformasi yordamida tuproq namligini o'lchash: Men bu darslikda esp32 yordamida tuproqdagi namlikni o'qish va keyin qiymatlarni thingsio.ai IoT bulutli platformasiga yuborish haqida tushuntiraman
Eshik va harorat holatini qayd qilish loyihasi: 21 qadam
Eshik va harorat holatini qayd qilish loyihasi: Bu yo'riqnomada sizga ESP8266 NodeMCU, DHT11 harorat va namlik sensori, eshik/deraza qamish tugmasi, 10K ohmli rezistor va boshqalar yordamida 10.00 dollardan past bo'lgan oddiy eshik va harorat holatini qayd qilish qurilmasi ko'rsatiladi. ulash sim. Gen
Mini ob -havo holatini qanday ko'rsatish mumkin: 4 qadam
Qanday qilib mini -ob -havo holatini ko'rsatish mumkin: Loyiha haqida Mikrokontroller bir vaqtning o'zida qiziqarli va ko'ngilochar bo'lishi mumkin, narsalarning haqiqiy Interneti uchun Internetga ulanishni qo'shing! Sizga 8x8 matritsali displey va ob -havo displeyi yordamida ob -havo holatining mini -displeyini qanday yaratganimni ko'rsatishga ruxsat bering