Բովանդակություն:
- Քայլ 1: Նյութեր և գործիքներ
- Քայլ 2. Softpots- ը ESP32- ին միացնելը
- Քայլ 3. ESP32- ի և RPI- ի անլար միացում
- Քայլ 4: Միացրեք ձեր կայքը և տվյալների բազան
- Քայլ 5: Ամեն ինչ միասին միացնելը
- Քայլ 6: Լրացուցիչ. LCD էկրան միացնելը
Video: Ingerութակի վրա մատների դիրքերի չափում ESP32: 6 քայլով
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:50
Որպես ջութակահար, ես միշտ ցանկացել եմ մի ծրագիր կամ գործիք, որը կարող է շատ ճշգրիտ ցույց տալ ինձ մատների դիրքը ջութակի վրա: Այս նախագծով ես փորձեցի կառուցել սա: Չնայած սա նախատիպ է, և դուք դեռ կարող եք ավելացնել բազմաթիվ հնարավորություններ:
Ես նաև փորձեցի տարանջատել ESP32- ը և rPI- ն, և այդպիսով ես ստիպեցի ESP32- ին անլար տվյալներ ուղարկել rPi- ին: Ինչը թերևս ամենադժվարն է այս նախագծում:
Նաև շատ կարևոր է, որ այս ծրագրի վերջում ոչինչ չի պահվում ձեր համակարգչում, բայց այն կա՛մ rPI- ի, կա՛մ ESP32- ի վրա է:
Քայլ 1: Նյութեր և գործիքներ
Նախքան այս նախագծի կառուցման առանձնահատկություններին անդրադառնալը մեզ պետք է մի քանի բան:
- 4x գծային փափուկ կաթսա. Գծային պոտենցիոմետրեր ՝ մատի դիրքը չափելու համար (ջութակն ունի 4 լար)
- ESP32. ESP32 մոդուլ `գծային փափուկ կաթսաներից տվյալները կարդալու համար:
- 4/4 ջութակ ՝ ջութակ ՝ գծային փափուկ կաթսաները վերևում տեղադրելու համար:
- a Raspberry Pi SD քարտով. ազնվամորի pi, որը կպահի մեր տվյալների բազան և կայքը:
- 10k պոտենցիոմետր. Պոտենցիոմետր LCD լուսավորության համար
- LCD էկրան. LCD էկրան, որը ցույց է տալիս rPi- ի ip հասցեատերերին
- Oldոդման հավաքածու. Բոլոր տարրերը միասին զոդելու համար
- Արականից արական լարեր և արականից իգական լարեր. Բոլոր տարրերը միացնելու մալուխներ
- Միկրո USB մալուխ. ESP32- ը սնուցելու համար
Քայլ 2. Softpots- ը ESP32- ին միացնելը
Առաջին հերթին մենք պետք է միացնենք մեր փափուկ կաթսաները esp32- ին: Մենք ձախ և աջ կապում ենք համապատասխանաբար 5V և GND- ին: Մենք կապում ենք միջին քորոցը ESP32- ի անալոգային քորոցին: Մենք նաև պետք է միացնենք միջին քորոցը 10k ohm դիմադրությամբ և այն միացնենք GND- ին: Սա այնպես է, որ softpots- ի մեր ելքը պատահական արժեք չվերադարձնի:
Այնուհետև մենք միացնում ենք ESP32- ը միկրո usb մալուխով մեր համակարգչին, որպեսզի կարողանանք դրան վերբեռնել ծածկագիրը: Մենք կօգտագործենք Arduino IDE- ն ESP32- ը ծրագրավորելու համար: Բայց նախ մենք պետք է տեղադրենք Arduino միջուկը ESP32- ի համար, որպեսզի կարողանանք ներբեռնել այն: Սա կարելի է անել այստեղ:
Այնուհետեւ մենք կարող ենք սկսել գրել կոդը:
Սկզբում մենք պետք է նշանակենք մեր կապումներին, որոնց միացրել ենք փափուկ կաթսաների մեր միջին քորոցը:
const int SOFT_POT_PIN1 = 34;
const int SOFT_POT_PIN2 = 35;
const int SOFT_POT_PIN3 = 32;
const int SOFT_POT_PIN4 = 33;
անստորագիր երկար ժամանակ;
անստորագիր երկար softPotTime;
Այնուհետեւ մենք կարող ենք կարգավորել մեր կապում: Եվ մենք պետք է սկսենք մեր սերիական մոնիտորը և մեր ժամանակը:
void setup () {
onTime = millis ();
Serial.begin (115200);
Serial.println («startրագրի սկիզբ»);
pinMode (SOFT_POT_PIN1, INPUT);
pinMode (SOFT_POT_PIN2, INPUT);
pinMode (SOFT_POT_PIN3, INPUT);
pinMode (SOFT_POT_PIN4, INPUT); }
void getdata (բայթ pdata ) {
// Կարդացեք փափուկ կաթսայի ADC արժեքով
Հետո մենք պետք է կարդանք մեր կապերը, որպեսզի կարողանանք ստանալ մեր տվյալները:
int softPotADC1 = analogRead (SOFT_POT_PIN1);
nt softPotADC2 = analogRead (SOFT_POT_PIN2);
int softPotADC3 = analogRead (SOFT_POT_PIN3);
int softPotADC4 = analogRead (SOFT_POT_PIN4);
Այնուհետև արժեքները դնում ենք ցուցակի մեջ, որպեսզի հետագայում հեշտությամբ դուրս գանք:
համար (int i = 0; i <4; i ++) {
int Անուններ = {softPotADC1, softPotADC2, softPotADC3, softPotADC4};
int softpot = Անուններ ;
if (softpot> 10) {
pdata [0] = i;
pdata [1] = փափուկ կաթսա;
pdata [2] = millis ();
} } }
}
Քայլ 3. ESP32- ի և RPI- ի անլար միացում
ESP32- ը և RPI- ն անլար կապելու համար մենք կօգտագործենք գրադարան, որը կոչվում է websocket: Այս գրադարանը տեղադրելու համար մենք կարող ենք ֆայլերը ստանալ այստեղ: ESP32- ի համար այս գրադարանից օգտվելու համար մենք պետք է փոխենք որոշ ֆայլեր հենց ֆայլերում:
Մենք պետք է փոխենք MD5.c և MD5.h.
- MD5Init դեպի MD5InitXXX
- MD5 Թարմացնել MD5 Թարմացնել XXX- ին
- MD5Final- ից MD5FinalXXX
Մենք նաև պետք է ջնջենք sha1 ֆայլերի avr/io.h տողերը:
Այնուհետև մենք կարող ենք գրադարանը ավելացնել մեր Arduino IDE- ին ուրվագծով> ներառել գրադարան> ավելացնել. ZIP գրադարան, այնուհետև կարող ենք ընտրել ձեր գրադարանը zip ֆայլում:
Դրանից հետո մենք կարող ենք սկսել գրել մեր կոդը:
Նախ ESP32- ի համար.
Ներառյալ մեր գրադարանը
#ներառել #ներառել
Կրկին նշանակելով մեր կապում:
const int SOFT_POT_PIN1 = 34;
const int SOFT_POT_PIN2 = 35;
const int SOFT_POT_PIN3 = 32;
const int SOFT_POT_PIN4 = 33;
Մեր wifi սերվերի նշանակումը
WiFiServer սերվեր (80);
Գործարկում է մեր վեբ սերվերի սերվերը
WebSocketServer webSocketServer;
Հանձնարարելով մեր SSID- ը և ձեր wifi- ի գաղտնաբառը
const char* ssid = "ձեր wifi SSID";
const char* գաղտնաբառ = "ձեր wifi գաղտնաբառը";
void setup () {
Կարգավորում եք ձեր սերիական մոնիտորը
Serial.begin (115200);
Կարգավորեք ձեր փափուկ կաթսաները
pinMode (SOFT_POT_PIN1, INPUT);
pinMode (SOFT_POT_PIN2, INPUT);
pinMode (SOFT_POT_PIN3, INPUT);
pinMode (SOFT_POT_PIN4, INPUT);
Սկսում ենք մեր wifi- ն և միանում դրան
WiFi.begin (ssid, գաղտնաբառ);
while (WiFi.status ()! = WL_CONNECTED) {
ուշացում (1000);
Serial.println ("Միացում WiFi- ին.."); }
Serial.println («Միացված է WiFi ցանցին»);
Serial.println (WiFi.localIP ());
server.begin (); ուշացում (100); }
void getdata (char *pdata) {
Ձեր տվյալները կարդալը
// Կարդացեք փափուկ կաթսայի ADC արժեքով
int softPotADC1 = analogRead (SOFT_POT_PIN1);
int softPotADC2 = analogRead (SOFT_POT_PIN2);
int softPotADC3 = analogRead (SOFT_POT_PIN3);
int softPotADC4 = analogRead (SOFT_POT_PIN4);
Տվյալների ցանկում տեղադրելը և դրանք տասնվեցականի վերածելը:
sprintf (pdata, " %x, %x, %x, %x, %x", softPotADC1, softPotADC2, softPotADC3, softPotADC4, millis ());
}
դատարկ շրջան () {
Ձեր հաճախորդին միացնելը (rPI)
WiFiClient client = server.available ();
եթե (client.connected ()) {
ուշացում (10);
եթե (webSocketServer.handshake (հաճախորդ)) {
Serial.println («Հաճախորդը միացված է»);
Տվյալների ուղարկում և ընդունում:
while (client.connected ()) {
char տվյալներ [30];
ստացված տվյալներ (տվյալներ);
Serial.println (տվյալներ);
webSocketServer.sendData (տվյալներ);
ուշացում (10); // Տվյալների ճիշտ ստացման համար անհրաժեշտ է ուշացում}
Serial.println («Հաճախորդն անջատված է»);
ուշացում (100); }
ուրիշ {
Serial.println ("shitsfuckedyo");
} } }
Այնուհետև python- ում rPI- ի համար.
Ներմուծելով մեր գրադարանները
ներմուծել ցանցի ներմուծման ժամանակը
Գլոբալ փոփոխական նշանակելը i
i = 0
Սահմանելով առավելագույնը 200 հաղորդագրություն, որը մենք կարող ենք ստանալ
nrOfMessages = 200
դասարան Websocket ():
def _init _ (self):
Նախագծելով մեր վեբ -ցանցը և միացնելով այն մեր ESP32- ին
self.ws = websocket. WebSocket ()
self.ws.connect ("ws: //172.30.248.48/")
Ստանալով մեր տվյալները
def աշխատանք (ինքնուրույն):
self.ws.send ("հաղորդագրություն nr: 0")
արդյունք = self.ws.recv () time.sleep (0.5) վերադարձի արդյունք
Փակել ցանցը ամեն ինչ ստանալուց հետո
def փակել (ինք):
self.ws. փակել ()
Քայլ 4: Միացրեք ձեր կայքը և տվյալների բազան
Ինչ վերաբերում է մեր Տվյալների բազան և կայքը միացնելուն, ապա նախևառաջ պետք է ստեղծել ձեր տվյալների բազան pi- ի վրա ՝ տեղադրելով mariadb: sudo apt install mariadb:
Այնուհետև կարող եք միանալ դրան ՝ sudo mariadb:
Այնուհետեւ դուք նույնպես պետք է ստեղծեք ձեր կայքը: Դուք կարող եք դա անել, ինչպես ցանկանում եք, բայց դուք պետք է օգտագործեք Flask և ձեր HTML- ում պետք է ունենաք ձև ՝ ձեր տվյալները դադարեցնելու և գործարկելու համար:
Այնուհետև կարող եք տեղադրել այս ծածկագիրը ՝ ձեր տվյալների բազան և ձեր կայքը միացնելու համար (և՛ կայքը, և՛ տվյալների բազան պետք է երկուսն էլ լինեն ձեր pi- ում, դա կարելի է անել ՝ օգտագործելով pycharm- ի կարգավորումներում տեղակայման ներդիրը)
flaskext.mysql- ից ներմուծել MySQL
app.config ["MYSQL_DATABASE_HOST"] = "localhost"
app.config ["MYSQL_DATABASE_DB"] = "ձեր տվյալների բազայի անունը"
app.config ["MYSQL_DATABASE_USER"] = "ձեր տվյալների բազայի օգտվող"
app.config ["MYSQL_DATABASE_PASSWORD"] = "ձեր տվյալների բազայի գաղտնաբառը"
Մեր տվյալների շտեմարանից տվյալների դուրսբերման գործառույթ:
def get_data (sql, params = Ոչ մեկը):
conn = mysql.connect ()
կուրսորը = conn.cursor ()
տպել («տվյալների ստացում»)
փորձել:
տպել (sql)
cursor.execute (sql, params)
բացառությամբ որպես e:
տպել (ե)
վերադարձնել Կեղծ
արդյունք = cursor.fetchall ()
տվյալներ =
արդյունքի տողի համար.
data.append (ցուցակ (տող))
cursor.close ()
conn.close ()
վերադարձնել տվյալները
Մեր տվյալների բազայում տվյալների տեղադրման գործառույթ
def set_data (sql, params = Ոչ մեկը):
conn = mysql.connect ()
կուրսորը = conn.cursor ()
փորձել:
log.debug (sql)
cursor.execute (sql, params) conn.commit ()
log.debug ("SQL uitgevoerd")
բացառությամբ որպես e:
log.exception («Fout bij uitvoeren van sql: {0})»: ձևաչափ (ե))
վերադարձնել Կեղծ
cursor.close ()
conn.close ()
վերադարձնել True
Մենք նաև պետք է թելադրենք մեր դիմումը, որպեսզի ձայնագրման ընթացքում կարողանաք այլ բաներ անել:
class ThreadedTask (threading. Thread):
def _init _ (self,):
Շարանը կարգավորելը
threading. Թեման._ init _ (ինքնուրույն)
Ստեղծեք ձեր ստացված բոլոր տվյալները պահելու ցուցակ
self.data_all =
def run (self):
ժամանակ. քուն (5)
Ներմուծեք ձեր սեփական Python ծածկագիրը, որտեղ դուք ստանում եք տվյալները
ներմուծեք Receive_websocket
Ստացեք ձեր տվյալները
w = ստանալ_քայլ
Կցեք ձեր տվյալները ձեր ցուցակում և տպեք դրանք:
i- ի համար (0, 200):
self.data_all.append (w.work (). split (","))
տպել (self.data_all)
առաջադրանք = ThreadedTask ()
Այնուհետև կարող եք անել task.run () ՝ ձեր թեման սկսելու և տվյալների ստացման համար:
Քայլ 5: Ամեն ինչ միասին միացնելը
Ձեր Pi- ից ձեր կայքը գործարկելու համար դուք պետք է օգտագործեք ծառայություն.
[Միավոր] Նկարագրություն = uWSGI օրինակ `project1 վեբ ինտերֆեյսին ծառայելու համար
Հետո = network.target
BindsTo = mysqld.service
Հետո = mysqld.service
[Ծառայություն]
Փոխեք ձեր օգտվողին
Օգտվող = պի
Խումբ = www-տվյալներ
Այստեղ դուք պետք է մուտքագրեք ձեր Flask ֆայլի գրացուցակը
WorkingDirectory =/home/pi/project1/վեբ
Ձեր ini ֆայլի տեղեկատու, որը կարող եք գտնել ավելի ուշ:
ExecStart =/usr/bin/uwsgi --ini /home/pi/project1/conf/uwsgi-flask.ini
[Տեղադրեք]
WantedBy = multi-user.target
uwsgi-flask.ini, որը դուք պետք է տեղադրեք վերը նշված ExecStart- ում նշված գրացուցակում
[uwsgi] մոդուլ = վեբ: app virtualenv =/home/pi/project1/env
վարպետ = ճշմարիտ գործընթացներ = 5
plugins = python3
socket = project1.sock chmod-socket = 660 վակուում = ճշմարիտ
անժամկետ = ճշմարիտ
Այժմ դուք կարող եք կարդալ ձեր տվյալները և ցուցադրել դրանք ձեր կայքում:
Քայլ 6: Լրացուցիչ. LCD էկրան միացնելը
Մենք կարող ենք միացնել LCD էկրան, որպեսզի կարողանանք ցույց տալ մեր Pi- ի IP հասցեն մեր կայքի համար:
ներմուծեք RPi. GPIO- ն որպես GPIOimport ժամանակ
ներմուծման հրամաններ
GPIO.cleanup ()
D0 = 22
D1 = 5
D2 = 6
D3 = 13
D4 = 19
D5 = 26
D6 = 20
D7 = 21
ցուցակ = [22, 5, 6, 13, 19, 26, 20, 21]
E = 24
RS = 23
դասի էկրան.
def _init _ (self):
GPIO.setmode (GPIO. BCM)
self.setup ()
#Function set self.stuur_instructie (0x3f) #Display self.stuur_instructie (0x0c) #On + cursor self.stuur_instructie (0x01) @staticmethod def setup (): GPIO.setup (list, GPIO. OUT) GPIO.setup (, RS], GPIO. OUT)
def stuur_instructie (self, byte):
GPIO.putput (E, GPIO. HIGH)
GPIO.output (RS, GPIO. LOW)
self.set_GPIO_bits (բայթ)
ժամանակ. քուն (0.005)
GPIO.output (E, GPIO. LOW)
def stuur_teken (self, char):
temp = ord (char)
GPIO.putput (E, GPIO. HIGH)
GPIO.putput (RS, GPIO. HIGH)
self.set_GPIO_bits (ջերմաստիճան)
ժամանակ. քուն (0.005)
GPIO.output (E, GPIO. LOW)
def set_GPIO_bits (ինքնակառավարման, բայթ):
i- ի համար (0, 8):
եթե (բայթ & (2 ** i)) == 0:
GPIO.putput (ցուցակ , GPIO. LOW)
այլ:
GPIO.putput (ցուցակ , GPIO. HIGH)
def main ():
s = Էկրան ()
teken = "Տեղական IP հասցե."
teken- ում նամակի համար.
s.stuur_teken (նամակ)
teken2 = commands.getoutput ("ip addr show wlan0 | grep -Po 'inet / K [d.]+'")
տպել (teken2)
s.stuur_instructie (0xc0)
տառի համար teken2:
s.stuur_teken (նամակ 2)
if _name_ == '_main_': #startingրագիր սկսած այստեղից
փորձել:
հիմնական ()
բացառությամբ Ստեղնաշարի
անցնել
Այնուհետև մենք կարող ենք ստեղծել ծառայություն ՝ LCD- ը գործարկելուց սկսելու համար:
Խորհուրդ ենք տալիս:
Խաղացեք Doom ձեր IPod- ի վրա 5 հեշտ քայլով: 5 քայլ
Խաղացեք Doom ձեր IPod- ով 5 հեշտ քայլով. Դա իսկապես հեշտ բան է, բայց շատերը դեռ զարմանում են, երբ տեսնում են, որ ես iPod- ով դատապարտված եմ խաղում և շփոթվում հրահանգի հետ
Ինտերֆեյս ADXL335 սենսոր Raspberry Pi 4B- ի վրա 4 քայլով `4 քայլ
Ինտերֆեյս ADXL335 սենսոր Raspberry Pi 4B- ի վրա ՝ 4 քայլով
ESP32- ի վրա հիմնված M5Stack M5stick C Եղանակի մոնիտոր DHT11- ով - Վերահսկեք ջերմաստիճանի խոնավության և ջերմության ինդեքսը M5stick-C- ի վրա DHT11: 6 քայլով
ESP32- ի վրա հիմնված M5Stack M5stick C Եղանակի մոնիտոր DHT11- ով | Վերահսկեք ջերմաստիճանի խոնավության և ջերմության ինդեքսը M5stick-C- ի վրա DHT11- ով: Ողջույն, տղերք, այս հրահանգներում մենք կսովորենք, թե ինչպես միացնել DHT11 ջերմաստիճանի տվիչը m5stick-C- ի հետ (զարգացման տախտակ m5stack- ով) և ցուցադրել այն m5stick-C- ի ցուցադրման վրա: Այսպիսով, այս ձեռնարկում մենք կկարդանք ջերմաստիճանը, խոնավությունը & շոգ եմ
Մատների շարժումով աշխատող խելացի մեքենա. 7 քայլ (նկարներով)
Սմարթ մեքենա, որն աշխատում է մատի շարժումով. Դա իմ նախագիծն է `խելացի մեքենա, այն չի աշխատում շարժական կամ սովորական հեռակառավարմամբ: Այն աշխատում է ձեռնոցով, այնպես որ հեռակառավարիչը մատի շարժումն է:
Picaxe- ի վրա հիմնված թվային ջերմաչափ `առավելագույն և նվազագույն` 13 քայլով
Picaxe- ի վրա հիմնված թվային ջերմաչափ ՝ առավելագույն և նվազագույն քանակով. Այն հիմնված է Picaxe չիպի վրա, քանի որ դրանք էժան են և հեշտ օգտագործման համար: Եթե սա նախատեսված է