Përmbajtje:
- Hapi 1: Materialet dhe Mjetet
- Hapi 2: Lidhja e Softpots me ESP32
- Hapi 3: Lidhja ESP32 dhe RPI pa tel
- Hapi 4: Lidhni faqen tuaj të internetit dhe bazën e të dhënave
- Hapi 5: Lidhni gjithçka së bashku
- Hapi 6: Extra: Lidhja e ekranit LCD
Video: Matja e pozicioneve të gishtërinjve në një violinë me ESP32: 6 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:25
Si një violinist kam dashur gjithmonë një aplikacion ose mjet që mund të më tregojë pozicionin e gishtërinjve të mi në violinë shumë të saktë. Me këtë projekt u përpoqa ta ndërtoj këtë. Edhe pse ky është një prototip dhe ju ende mund të shtoni shumë veçori.
Unë gjithashtu u përpoqa të ndaj ESP32 dhe rPI dhe kështu bëra që ESP32 të dërgonte të dhëna pa tel në rPi. Kjo është ndoshta gjëja më e vështirë për këtë projekt.
Alsoshtë gjithashtu shumë e rëndësishme që në fund të këtij projekti asgjë të mos ruhet në kompjuterin tuaj, por është ose në rPI ose ESP32.
Hapi 1: Materialet dhe Mjetet
Para se të hyjmë në specifikat e ndërtimit të këtij projekti na duhen disa gjëra.
- 4x Softpot Linear: Potenciometra linearë për të matur pozicionin e një gishti (një violinë ka 4 tela)
- ESP32: Një modul ESP32 për të lexuar të dhënat nga vazot e buta lineare.
- një violinë 4/4: një violinë për të vendosur tenxhere të buta lineare në krye.
- një Raspberry Pi me një kartë SD: një pi mjedër e cila do të ruajë bazën e të dhënave dhe faqen tonë të internetit.
- Potenciometër 10k: një potenciometër për shkëlqimin e LCD
- Ekran LCD: një ekran LCD për t'u shfaqur adresuesve të IP të rPi
- Kompleti i saldimit: Për bashkimin e të gjithë elementëve së bashku
- Telat meshkuj me meshkuj dhe telat meshkuj me femra: Kabllo për lidhjen e të gjithë elementëve
- Kabllo mikro USB: Për fuqizimin e ESP32
Hapi 2: Lidhja e Softpots me ESP32
Para së gjithash ne duhet të lidhim vazot tona me esp32. Ne lidhim kunjat e majtë dhe të djathtë përkatësisht me 5V dhe GND. Ne e lidhim kunjin e mesëm me një kunj analog në ESP32. Ne gjithashtu duhet të lidhim kunjin e mesëm me një rezistencë prej 10k ohm dhe ta lidhim këtë me GND. Kjo është kështu që dalja jonë e softpots nuk kthen vlerë të rastësishme.
Pastaj e lidhim ESP32 me kabllon mikro usb në kompjuterin tonë në mënyrë që të ngarkojmë kodin në të. Ne do të përdorim Arduino IDE për programimin e ESP32. Por së pari ne duhet të instalojmë bërthamën Arduino për ESP32 në mënyrë që të mund ta ngarkojmë në të. Kjo mund të bëhet këtu.
Pastaj mund të fillojmë të shkruajmë kod.
Së pari ne duhet të caktojmë kunjat tanë me të cilët lidhëm kunjin tonë të mesëm të vazove të buta.
const int SOFT_POT_PIN1 = 34;
const int SOFT_POT_PIN2 = 35;
const int SOFT_POT_PIN3 = 32;
const int SOFT_POT_PIN4 = 33;
pa shenjë gjatë një kohe;
softPotTime e gjatë e panënshkruar;
Pastaj ne mund të vendosim kunjat tona. Dhe ne duhet të fillojmë monitorin tonë serik dhe kohën tonë.
void setup () {
në kohë = milis ();
Serial.fillo (115200);
Serial.println ("Fillimi i programit");
pinMode (SOFT_POT_PIN1, INPUT);
pinMode (SOFT_POT_PIN2, INPUT);
pinMode (SOFT_POT_PIN3, INPUT);
pinMode (SOFT_POT_PIN4, INPUT); }
void getdata (byte pdata ) {
// Lexoni në vlerën ADC të tenxhere të butë
Atëherë ne duhet të lexojmë kunjat tona në mënyrë që të marrim të dhënat tona.
int softPotADC1 = analogRead (SOFT_POT_PIN1);
nt softPotADC2 = analogRead (SOFT_POT_PIN2);
int softPotADC3 = analogRead (SOFT_POT_PIN3);
int softPotADC4 = analogRead (SOFT_POT_PIN4);
Pastaj i vendosim vlerat në një listë në mënyrë që ta nxjerrim me lehtësi më vonë.
për (int i = 0; i <4; i ++) {
int Emrat = {softPotADC1, softPotADC2, softPotADC3, softPotADC4};
int softpot = Emrat ;
nëse (tenxhere e butë> 10) {
pdata [0] = i;
pdata [1] = tenxhere e butë;
pdata [2] = milis ();
} } }
}
Hapi 3: Lidhja ESP32 dhe RPI pa tel
Për lidhjen pa tel të ESP32 dhe RPI, ne do të përdorim një bibliotekë të quajtur websocket. Për të instaluar këtë bibliotekë, ne mund t'i marrim skedarët këtu. Ne do të duhet të ndryshojmë një kod në vetë skedarët në mënyrë që të përdorim këtë bibliotekë për ESP32.
Do të na duhet të ndryshojmë MD5.c dhe MD5.h.
- MD5Init në MD5InitXXX
- MD5Përditëso në MD5UpdateXXX
- MD5Final në MD5FinalXXX
Ne gjithashtu do të na duhet të fshijmë linjat avr/io.h në skedarët sha1.
Pastaj mund ta shtojmë bibliotekën në Arduino IDE me skicë> përfshi bibliotekën> shtojmë bibliotekën. ZIP dhe më pas mund të zgjedhim bibliotekën tuaj në një skedar zip.
Pas kësaj ne mund të fillojmë të shkruajmë kodin tonë.
Së pari për ESP32:
Përfshirë bibliotekën tonë
#përfshi #përfshi
Caktimi i kunjave tanë përsëri.
const int SOFT_POT_PIN1 = 34;
const int SOFT_POT_PIN2 = 35;
const int SOFT_POT_PIN3 = 32;
const int SOFT_POT_PIN4 = 33;
Caktimi i serverit tonë wifi
Serveri WiFiServer (80);
Fillimi i serverit tonë të websocket
WebSocketServer webSocketServer;
Caktimi i SSID -it tonë dhe fjalëkalimi i wifi -t tuaj
const char* ssid = "SSID -i juaj wifi";
const char* fjalëkalimi = "fjalëkalimi yt wifi";
void setup () {
Vendosja e monitorit tuaj serik
Serial.fillo (115200);
Vendosja e tenxhereve tuaja të buta
pinMode (SOFT_POT_PIN1, INPUT);
pinMode (SOFT_POT_PIN2, INPUT);
pinMode (SOFT_POT_PIN3, INPUT);
pinMode (SOFT_POT_PIN4, INPUT);
Fillimi i wifi -t tonë dhe lidhja me të
WiFi.filloni (ssid, fjalëkalim);
ndërsa (WiFi.status ()! = WL_CONNECTED) {
vonesa (1000);
Serial.println ("Lidhja me WiFi.."); }
Serial.println ("Lidhur me rrjetin WiFi");
Serial.println (WiFi.localIP ());
server.filloj (); vonesa (100); }
void getdata (char *pdata) {
Leximi i të dhënave tuaja
// Lexoni në vlerën ADC të tenxhere të butë
int softPotADC1 = analogRead (SOFT_POT_PIN1);
int softPotADC2 = analogRead (SOFT_POT_PIN2);
int softPotADC3 = analogRead (SOFT_POT_PIN3);
int softPotADC4 = analogRead (SOFT_POT_PIN4);
Vendosja e të dhënave në një listë dhe shndërrimi i tyre në heksadecimal.
sprintf (pdata, " %x, %x, %x, %x, %x", softPotADC1, softPotADC2, softPotADC3, softPotADC4, milis ());
}
lak void () {
Lidhja e klientit tuaj (rPI)
Klienti WiFiClient = server.available ();
nëse (klienti.lidhur ()) {
vonesa (10);
në qoftë se (webSocketServer.handshake (klient)) {
Serial.println ("Klienti i lidhur");
Dërgimi dhe marrja e të dhënave.
ndërsa (klienti.lidhur ()) {
të dhëna char [30];
të dhëna (të dhëna);
Serial.println (të dhëna);
webSocketServer.sendData (të dhëna);
vonesa (10); // Vonesa e nevojshme për marrjen e saktë të të dhënave}
Serial.println ("Klienti u shkëput");
vonesa (100); }
tjeter {
Serial.println ("shitsfuckedyo");
} } }
Pastaj për rPI në python:
Importimi i bibliotekave tona
importo websocketimport kohë
Caktimi i një variabeli globale i
i = 0
Vendosja e një mesazhi maksimal prej 200 që mund të marrim
nrOfMessages = 200
uebfaqe e klasës ():
def _init _ (vetja):
Fillimi i faqes sonë të internetit dhe lidhja e tij me ESP32
self.ws = websocket. WebSocket ()
self.ws.connect ("ws: //172.30.248.48/")
Marrja e të dhënave tona
def punë (vetë):
self.ws.send ("mesazhi nr: 0")
rezultati = vetja.ws.recv () koha. gjumi (0.5) rezultati i kthimit
Mbyllja e websocket pasi keni marrë gjithçka
def mbyll (vetja):
vet.ws. mbyll ()
Hapi 4: Lidhni faqen tuaj të internetit dhe bazën e të dhënave
Sa i përket lidhjes së bazës së të dhënave dhe faqes sonë të internetit, para së gjithash do t'ju duhet të krijoni bazën e të dhënave tuaja në pi duke instaluar mariadb: sudo apt install mariadb.
Atëherë mund ta arrini duke bërë: sudo mariadb.
Atëherë do t'ju duhet gjithashtu të krijoni faqen tuaj të internetit. Ju mund ta bëni këtë si të doni, por duhet të përdorni Flask dhe duhet të keni një formë në HTML -në tuaj për ndalimin dhe fillimin e të dhënave tuaja.
Pastaj mund ta futni këtë kod për të lidhur bazën tuaj të të dhënave dhe faqen tuaj të internetit (si faqja juaj ashtu edhe baza e të dhënave duhet të jenë të dyja në pi tuaj, kjo mund të bëhet duke përdorur skedën e vendosjes në cilësimet e pycharm)
nga flaskext.mysql importoj MySQL
app.config ["MYSQL_DATABASE_HOST"] = "localhost"
app.config ["MYSQL_DATABASE_DB"] = "emri juaj i bazës së të dhënave"
app.config ["MYSQL_DATABASE_USER"] = "përdoruesi juaj i bazës së të dhënave"
app.config ["MYSQL_DATABASE_PASSWORD"] = "fjalëkalimi juaj i bazës së të dhënave"
Funksioni për nxjerrjen e të dhënave nga baza jonë e të dhënave.
def get_data (sql, params = Asnjë):
conn = mysql.connect ()
kursori = kon.cursor ()
print ("marrja e të dhënave")
provo:
print (sql)
cursor.execute (sql, params)
përveç Përjashtimit si e:
shtyp (e)
kthehem False
rezultat = cursor.fetchall ()
të dhëna =
për rreshtin në rezultat:
të dhëna. shtojca (lista (rreshti))
kursori. mbyll ()
lidh. mbyll ()
kthejnë të dhënat
Funksioni për futjen e të dhënave në bazën tonë të të dhënave
def set_data (sql, params = Asnjë):
conn = mysql.connect ()
kursori = kon.cursor ()
provo:
log.debug (sql)
cursor.execute (sql, params) conn.commit ()
log.debug ("SQL uitgevoerd")
përveç Përjashtimit si e:
log.exception ("Fout bij uitvoeren van sql: {0})". format (e))
kthehem False
kursori. mbyll ()
lidh. mbyll ()
kthehu Vërtetë
Ne gjithashtu do të duhet të vendosim aplikacionin tonë në mënyrë që të mund të bëni gjëra të tjera gjatë regjistrimit.
klasa ThreadedTask (filetim. Thread):
def _init _ (vetja,):
Vendosja e fijes
filetim. Thread._ init _ (vetë)
Krijimi i një liste për mbajtjen e të gjitha të dhënave tuaja të marra
vetë.data_all =
def drejtuar (vetvetja):
koha. gjumi (5)
Importoni kodin tuaj python ku merrni të dhënat
importo receb_websocket
Merrni të dhënat tuaja
w = merrni_websocket. Webbocket ()
Shtoni të dhënat tuaja në listën tuaj dhe shtypni ato.
për i në rang (0, 200):
self.data_all.append (w.work (). split (","))
print (vet.data_all)
detyrë = ThreadedTask ()
Pastaj mund të bëni task.run () për të filluar Thread -in tuaj dhe për të filluar të merrni të dhëna.
Hapi 5: Lidhni gjithçka së bashku
Për të drejtuar uebfaqen tuaj nga Pi juaj duhet të përdorni një shërbim:
[Njësia] Përshkrimi = shembulli uWSGI për t'i shërbyer ndërfaqes në internet të projektit1
Pas = network.target
BindsTo = mysqld.service
Pas = mysqld.service
[Shërbimi]
Ndryshoni tek përdoruesi juaj
Përdoruesi = pi
Grupi = www-të dhënat
Këtu duhet të futni drejtorinë tuaj të skedarit tuaj Flask
WorkingDirectory =/home/pi/project1/web
Drejtoria e skedarit tuaj ini që mund të gjendet më vonë.
ExecStart =/usr/bin/uwsgi --ini /home/pi/project1/conf/uwsgi-flask.ini
[Instalo]
WantedBy = multi-user.target
uwsgi-flask.ini që duhet të vendosni në drejtorinë e specifikuar në ExecStart më lart
[uwsgi] moduli = uebi: aplikacioni virtualenv =/home/pi/project1/env
master = procese të vërteta = 5
shtojca = python3
prizë = projekt1.sock chmod-fole = 660 vakum = e vërtetë
vdes në afat = i vërtetë
Tani mund t'i lexoni të dhënat tuaja dhe t'i shfaqni në faqen tuaj të internetit.
Hapi 6: Extra: Lidhja e ekranit LCD
Ne mund të lidhim një ekran LCD në mënyrë që të mund të tregojmë adresën IP të Pi tonë për faqen tonë të internetit.
importoni RPi. GPIO si kohë GPIOimport
komandat e importit
GPIO.cleanup ()
D0 = 22
D1 = 5
D2 = 6
D3 = 13
D4 = 19
D5 = 26
D6 = 20
D7 = 21
lista = [22, 5, 6, 13, 19, 26, 20, 21]
E = 24
RS = 23
Ekrani i klasës:
def _init _ (vetja):
GPIO.setmode (GPIO. BCM)
self.setup ()
#Funksioni i vendosur vetë.stuur_instructie (0x3f) #Display self.stuur_instructie (0x0c) #On + cursor self.stuur_instructie (0x01) @staticmethod def setup (): GPIO.setup (lista, GPIO. OUT) GPIO.setup (, RS], GPIO. OUT)
def stuur_instructie (vetë, byte):
GPIO.putput (E, GPIO. HIGHT)
GPIO.putput (RS, GPIO. LOW)
vet.caktoni_BPIO_bit (bajt)
koha. gjumi (0.005)
GPIO.putput (E, GPIO. LOW)
def stuur_teken (vet, char):
temp = ord (char)
GPIO.putput (E, GPIO. HIGHT)
GPIO.putput (RS, GPIO. HIGHT)
vet.caktoni_PPIO_bit (temp)
koha. gjumi (0.005)
GPIO.putput (E, GPIO. LOW)
def set_GPIO_bits (vet, bajt):
për i në rang (0, 8):
nëse (bajt & (2 ** i)) == 0:
GPIO.putput (lista , GPIO. LOW)
tjeter:
GPIO.putput (lista , GPIO. HIGHT)
def kryesore ():
s = Ekrani ()
teken = "Adresa IP lokale:"
për letrën në teken:
s.stuur_teken (letër)
teken2 = commands.getoutput ("ip addr show wlan0 | grep -Po 'inet / K [ d.]+'")
print (teken2)
s.stuur_instructie (0xc0)
për shkronjën 2 në teken2:
s.stuur_teken (shkronja 2)
nëse _name_ == '_majt_': #Program duke filluar nga këtu
provo:
kryesore ()
përveç KeyboardIntruptrupt:
kaloj
Pastaj ne mund të krijojmë një shërbim për të filluar LCD-në gjatë fillimit.
Recommended:
Ndërfaqja e sensorit kapacitiv të gjurmëve të gishtërinjve me Arduino UNO: 7 hapa
Ndërfaqja e sensorit kapacitiv të gjurmëve të gishtërinjve me Arduino UNO: Hej, çfarë ka, djema! Akarsh këtu nga CETech. Sot ne do të shtojmë një shtresë mbrojtëse në projektet tona. Mos u shqetësoni ne nuk do të caktojmë asnjë truprojë për të njëjtën gjë. Do të jetë një sensor gjurmë gishtash pak i bukur dhe i bukur nga DFRobot. Pra
Identifikimi i gjurmëve të gishtërinjve: 4 hapa
Identifikimi i gjurmëve të gishtërinjve: Ne mund ta shohim aplikacionin e gjurmëve të gishtërinjve në jetën tonë të përditshme. Me zhvillimin e industrisë së telefonisë celulare, telefoni celular i pothuajse të gjithëve ka funksionin e zhbllokimit të gjurmëve të gishtërinjve. Sot, unë do të prezantoj një pajisje zhbllokimi të gjurmëve të gishtërinjve e cila mund të përdoret në
Një makinë për frikësimin e Halloween -it duke përdorur një PIR, një kungull të printuar në 3D dhe një Pranker audio të pajtueshme me Troll Arduino/Bordi praktik i Shakasë.: 5 Hapa
Një makinë për frikësimin e Halloween -it duke përdorur një PIR, një kungull të printuar në 3D dhe Tran Arduino Compatible Audio Pranker/Joke Board praktike .: Bordi Troll i krijuar nga Patrick Thomas Mitchell i EngineeringShock Electronics, dhe u financua plotësisht në Kickstarter jo shumë kohë më parë. Unë mora shpërblimin disa javë më parë për të ndihmuar në shkrimin e disa shembujve të përdorimit dhe ndërtimin e një biblioteke Arduino në një përpjekje
Matja e temperaturës duke përdorur një PT100 dhe një Arduino: 16 hapa
Matja e temperaturës duke përdorur një PT100 dhe një Arduino: Qëllimi i këtij projekti është të hartojë, ndërtojë dhe testojë një sistem të ndjerit të temperaturës. Sistemi është krijuar për të matur një gamë të temperaturës nga 0 në 100 ° C. Një PT100 u përdor për të matur temperaturën, dhe është një detektor i temperaturës së rezistencës (RTD)
Si të mashtroni një sistem sigurie të gjurmëve të gishtërinjve aq lehtë sa ABC: 12 hapa (me fotografi)
Si të mashtroni një sistem sigurie të gjurmëve të gishtërinjve aq lehtë sa ABC: Ky udhëzim do t'ju tregojë se si të mashtroni një sistem sigurie të gjurmëve të gishtërinjve aq lehtë sa ABC. IBM nuk dëshiron që ju të dini për ,. funksionon edhe për shumicën e sistemit të sigurisë së gjurmëve të gishtërinjve. Për shembull: p.sh. dera, telefoni celular …. Ky udhëzim vjen me v