Sisällysluettelo:
- Vaihe 1: Materiaalit ja työkalut
- Vaihe 2: Softpottien liittäminen ESP32 -laitteeseen
- Vaihe 3: ESP32: n ja RPI: n liittäminen langattomasti
- Vaihe 4: Yhdistä verkkosivusto ja tietokanta
- Vaihe 5: Yhdistä kaikki toisiinsa
- Vaihe 6: Lisätoiminto: LCD -näytön liittäminen
Video: Sormien asentojen mittaaminen viululla ESP32: 6 askelta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:02
Viulunsoittajana olen aina halunnut sovelluksen tai työkalun, joka voisi näyttää minulle sormien sijainnin viululla erittäin tarkasti. Tällä projektilla yritin rakentaa tätä. Vaikka tämä on prototyyppi ja voit silti lisätä monia ominaisuuksia.
Yritin myös erottaa ESP32: n ja rPI: n, ja näin sain ESP32: n lähettämään tietoja langattomasti rPi: hen. Mikä on luultavasti vaikein asia tässä projektissa.
On myös erittäin tärkeää, että tämän projektin lopussa mitään ei tallenneta tietokoneellesi, vaan se on joko rPI: ssä tai ESP32: ssa.
Vaihe 1: Materiaalit ja työkalut
Ennen kuin ryhdymme tämän hankkeen rakentamisen erityispiirteisiin, tarvitsemme muutamia asioita.
- 4x lineaarinen pehmeä potti: Lineaariset potentiometrit sormen asennon mittaamiseen (viulussa on 4 kieltä)
- ESP32: ESP32 -moduuli, joka lukee tiedot lineaarisista softpoteista.
- 4/4 viulu: viulu lineaaristen pehmeiden kattiloiden asettamiseksi päälle.
- Raspberry Pi SD -kortilla: vadelma pi, joka tallentaa tietokantamme ja verkkosivustomme.
- 10k potentiometri: potentiometri LCD -näytön kirkkaudelle
- LCD-näyttö: LCD-näyttö, joka näkyy rPi: n IP-osoitteille
- Juotosarja: kaikkien elementtien juottamiseen yhdeksi
- Uros-urosjohdot ja uros-naarasjohdot: Kaapelit kaikkien elementtien liittämiseen
- Mikro -USB -kaapeli: ESP32: n virransyöttöön
Vaihe 2: Softpottien liittäminen ESP32 -laitteeseen
Ensinnäkin meidän on liitettävä softpottimme esp32: een. Liitämme vasen ja oikea nasta 5V ja GND. Yhdistämme keskitapin ESP32: n analogiseen nastaan. Meidän on myös kytkettävä keskitappi, jonka vastus on 10 k ohmia, ja liitä tämä GND: hen. Tämä johtuu siitä, että softpots -tuotoksemme ei palauta satunnaisarvoa.
Liitämme sitten ESP32 mikro -usb -kaapelilla tietokoneeseemme, jotta voimme ladata koodin siihen. Käytämme Arduino IDE: tä ESP32: n ohjelmointiin. Mutta ensin meidän on asennettava Arduino -ydin ESP32: lle, jotta voimme ladata siihen. Tämä voidaan tehdä täällä.
Sitten voimme alkaa kirjoittaa koodia.
Ensin meidän on osoitettava nastamme, joihin olemme liittäneet softpottien keskitapin.
const int SOFT_POT_PIN1 = 34;
const int SOFT_POT_PIN2 = 35;
const int SOFT_POT_PIN3 = 32;
const int SOFT_POT_PIN4 = 33;
allekirjoittamaton pitkä aika;
allekirjoittamaton pitkä softPotTime;
Sitten voimme asettaa nastamme. Ja meidän on aloitettava sarjamonitorimme ja aikamme.
void setup () {
onTime = millis ();
Sarja.alku (115200);
Serial.println ("Ohjelman käynnistys");
pinMode (SOFT_POT_PIN1, INPUT);
pinMode (SOFT_POT_PIN2, INPUT);
pinMode (SOFT_POT_PIN3, INPUT);
pinMode (SOFT_POT_PIN4, INPUT); }
void getdata (tavu pdata ) {
// Lue pehmeän potin ADC -arvo
Sitten meidän on luettava nastamme, jotta voimme vastaanottaa tietomme.
int softPotADC1 = analoginen luku (SOFT_POT_PIN1);
nt softPotADC2 = analoginen luku (SOFT_POT_PIN2);
int softPotADC3 = analoginen luku (SOFT_POT_PIN3);
int softPotADC4 = analoginen luku (SOFT_POT_PIN4);
Sitten laitamme arvot luetteloon, jotta voimme helposti tulostaa sen myöhemmin.
(int i = 0; i <4; i ++) {
int Nimet = {softPotADC1, softPotADC2, softPotADC3, softPotADC4};
int softpot = Nimet ;
jos (softpot> 10) {
pdata [0] = i;
pdata [1] = softpot;
pdata [2] = millis ();
} } }
}
Vaihe 3: ESP32: n ja RPI: n liittäminen langattomasti
ESP32: n ja RPI: n langattomaan yhdistämiseen käytämme websocket -nimistä kirjastoa. Tämän kirjaston asentamiseksi voimme hakea tiedostot täältä. Meidän on muutettava jotain koodia itse tiedostoissa voidaksemme käyttää tätä kirjastoa ESP32: lle.
Meidän on vaihdettava MD5.c ja MD5.h.
- MD5Init - MD5InitXXX
- MD5Päivitä MD5 -päivitykseksiXXX
- MD5Final - MD5FinalXXX
Meidän on myös poistettava shar -tiedostojen avr/io.h -rivit.
Sitten voimme lisätä kirjaston Arduino IDE: hen luonnoksella> sisällyttää kirjastoon> lisätä. ZIP -kirjaston ja sitten voimme valita kirjastosi zip -tiedostona.
Sen jälkeen voimme aloittaa koodimme kirjoittamisen.
Ensimmäinen ESP32: lle:
Kirjastomme mukaan lukien
#Sisällytä #Sisällytä
Määritämme nastamme uudelleen.
const int SOFT_POT_PIN1 = 34;
const int SOFT_POT_PIN2 = 35;
const int SOFT_POT_PIN3 = 32;
const int SOFT_POT_PIN4 = 33;
Määritämme wifi -palvelimemme
WiFi -palvelinpalvelin (80);
Websocket -palvelimen käynnistäminen
WebSocketServer webSocketServer;
Määritä wifi -verkkosi SSID ja salasana
const char* ssid = "wifi -SSID -tunnuksesi";
const char* password = "wifi -salasanasi";
void setup () {
Sarjamonitorin asentaminen
Sarja.alku (115200);
Softpottien asettaminen
pinMode (SOFT_POT_PIN1, INPUT);
pinMode (SOFT_POT_PIN2, INPUT);
pinMode (SOFT_POT_PIN3, INPUT);
pinMode (SOFT_POT_PIN4, INPUT);
Käynnistetään wifi ja muodostetaan yhteys siihen
WiFi.begin (ssid, salasana);
while (WiFi.status ()! = WL_CONNECTED) {
viive (1000);
Serial.println ("Yhdistäminen WiFi -verkkoon.."); }
Serial.println ("Yhdistetty WiFi -verkkoon");
Serial.println (WiFi.localIP ());
server.begin (); viive (100); }
void getdata (char *pdata) {
Tietojesi lukeminen
// Lue pehmeän potin ADC -arvo
int softPotADC1 = analoginen luku (SOFT_POT_PIN1);
int softPotADC2 = analoginen lukema (SOFT_POT_PIN2);
int softPotADC3 = analoginen luku (SOFT_POT_PIN3);
int softPotADC4 = analoginen luku (SOFT_POT_PIN4);
Tietojen sijoittaminen luetteloon ja niiden muuntaminen heksadesimaaliluvuksi.
sprintf (pdata, " %x, %x, %x, %x, %x", softPotADC1, softPotADC2, softPotADC3, softPotADC4, millis ());
}
void loop () {
Asiakkaan yhdistäminen (rPI)
WiFiClient -asiakas = server.available ();
jos (client.connected ()) {
viive (10);
if (webSocketServer.handshake (client)) {
Serial.println ("Asiakas kytketty");
Tietojen lähettäminen ja vastaanottaminen.
while (client.connected ()) {
char -tiedot [30];
getdata (data);
Serial.println (data);
webSocketServer.sendData (data);
viive (10); // Tietojen oikeaan vastaanottamiseen tarvitaan viive}
Serial.println ("Asiakas katkaistu");
viive (100); }
muu {
Serial.println ("shitsfuckedyo");
} } }
Sitten rPI pythonissa:
Kirjastojen tuonti
tuoda websocket tuonti aika
Globalen määrittäminen variabel i
i = 0
Asetamme enintään 200 viestiä, jotka voimme vastaanottaa
nrOfMessages = 200
luokan Websocket ():
def _init _ (itse):
Alustetaan verkkoliitäntä ja yhdistetään se ESP32 -laitteeseemme
self.ws = websocket. WebSocket ()
self.ws.connect ("ws: //172.30.248.48/")
Tietojemme vastaanottaminen
def työ (itse):
self.ws.send ("viestin numero: 0")
result = self.ws.recv () time.sleep (0.5) palautustulos
Verkkopistokkeen sulkeminen saatuaan kaiken
def close (itse):
self.ws.close ()
Vaihe 4: Yhdistä verkkosivusto ja tietokanta
Mitä tulee tietokannan ja verkkosivuston yhdistämiseen, sinun on ensin luotava tietokanta pi: hen asentamalla mariadb: sudo apt install mariadb.
Sitten pääset siihen tekemällä: sudo mariadb.
Sitten sinun on myös luotava verkkosivustosi. Voit tehdä tämän haluamallasi tavalla, mutta sinun on käytettävä pulloa ja sinulla on oltava HTML -lomake tietojen pysäyttämiseksi ja käynnistämiseksi.
Sitten voit lisätä tämän koodin yhdistämään tietokantasi ja verkkosivustosi (sekä verkkosivustosi että tietokannan on oltava pi: ssäsi, tämä voidaan tehdä käyttämällä pycharmin asetusten käyttöönotto -välilehteä)
osoitteesta flaskext.mysql Tuo MySQL
app.config ["MYSQL_DATABASE_HOST"] = "paikallinen isäntä"
app.config ["MYSQL_DATABASE_DB"] = "tietokannasi nimi"
app.config ["MYSQL_DATABASE_USER"] = "tietokannasi käyttäjä"
app.config ["MYSQL_DATABASE_PASSWORD"] = "tietokantasi salasana"
Toiminto tietojen poistamiseksi tietokannastamme.
def get_data (sql, params = Ei mitään):
conn = mysql.connect ()
kohdistin = jatko -osoitin ()
tulosta ("tietojen saaminen")
yrittää:
tulosta (sql)
cursor.execute (sql, params)
paitsi poikkeus, kuten e:
tulosta (e)
palauta Väärä
result = cursor.fetchall ()
data =
riville tuloksessa:
data.append (lista (rivi))
cursor.close ()
conn.close ()
palauttaa tiedot
Toiminto tietojen lisäämiseksi tietokantaamme
def set_data (sql, params = Ei mitään):
conn = mysql.connect ()
kohdistin = jatko -osoitin ()
yrittää:
log.debug (sql)
cursor.execute (sql, params) conn.commit ()
log.debug ("SQL uitgevoerd")
paitsi poikkeus, kuten e:
log.exception ("Fout bij uitvoeren van sql: {0})". format (e))
palauta Väärä
cursor.close ()
conn.close ()
palaa tosi
Meidän on myös langatettava sovelluksemme, jotta voit tehdä muita asioita tallennuksen aikana.
luokka ThreadedTask (threading. Thread):
def _init _ (itse,):
Langan määrittäminen
säie._ init _ (itse)
Luodaan luettelo kaikkien vastaanotettujen tietojen säilyttämiseksi
self.data_all =
def run (itse):
aika.unen (5)
Tuo oma python -koodisi sinne, missä vastaanotat tiedot
tuo vastaanotto_websocket
Vastaanota tietosi
w = Receive_websocket. Websocket ()
Liitä tiedot luetteloon ja tulosta ne.
i alueella (0, 200):
self.data_all.append (w.work (). split (","))
tulosta (self.data_all)
task = ThreadedTask ()
Sitten voit tehdä task.run () käynnistääksesi viestiketjun ja aloittaaksesi tietojen vastaanottamisen.
Vaihe 5: Yhdistä kaikki toisiinsa
Jos haluat käyttää verkkosivustoasi Pi -laitteestasi, sinun on käytettävä palvelua:
[Yksikkö] Kuvaus = uWSGI -ilmentymä palvelemaan projektin1 verkkokäyttöliittymää
Jälkeen = network.target
BindsTo = mysqld.service
Jälkeen = mysqld.service
[Palvelu]
Vaihda käyttäjäksi
Käyttäjä = pi
Ryhmä = www-data
Täällä sinun on syötettävä Flask -tiedostosi hakemisto
WorkingDirectory =/home/pi/project1/web
Ini -tiedoston hakemisto, joka löytyy myöhemmin.
ExecStart =/usr/bin/uwsgi --ini /home/pi/project1/conf/uwsgi-flask.ini
[Asentaa]
WantedBy = usean käyttäjän.target
uwsgi-flask.ini, joka sinun on sijoitettava hakemistoon, jonka määritit yllä ExecStartissa
[uwsgi] module = web: app virtualenv =/home/pi/project1/env
master = todelliset prosessit = 5
laajennukset = python3
pistorasia = projekti1.sock chmod-socket = 660 tyhjiö = totta
die-on-term = totta
Nyt voit lukea tietosi ja näyttää ne verkkosivustollasi.
Vaihe 6: Lisätoiminto: LCD -näytön liittäminen
Voimme liittää nestekidenäytön, jotta voimme näyttää Pi: n IP-osoitteen verkkosivustollemme.
tuoda RPi. GPIO GPIO -tuontiaikaksi
tuonti komentoja
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
luokan näyttö:
def _init _ (itse):
GPIO.setmode (GPIO. BCM)
self.setup ()
#Function set self.stuur_instructie (0x3f) #Display self.stuur_instructie (0x0c) #On + kohdistin self.stuur_instructie (0x01) @staticmethod def setup (): GPIO.setup (list, GPIO. OUT) GPIO.setup ([E, RS], GPIO. OUT)
def stuur_instructie (itse, tavu):
GPIO -lähtö (E, GPIO. HIGH)
GPIO -lähtö (RS, GPIO. LOW)
self.set_GPIO_bits (tavu)
aika. unta (0,005)
GPIO -lähtö (E, GPIO. LOW)
def stuur_teken (self, char):
lämpötila = ord (char)
GPIO -lähtö (E, GPIO. HIGH)
GPIO -lähtö (RS, GPIO. HIGH)
self.set_GPIO_bits (lämpötila)
aika. unta (0,005)
GPIO -lähtö (E, GPIO. LOW)
def set_GPIO_bits (itse, tavu):
i alueella (0, 8):
jos (tavu & (2 ** i)) == 0:
GPIO. output (luettelo , GPIO. LOW)
muu:
GPIO. lähtö (luettelo , GPIO. HIGH)
def main ():
s = Näyttö ()
teken = "Paikallinen IP -osoite:"
kirjain tekenissä:
s.stuur_teken (kirje)
teken2 = commands.getoutput ("ip addr show wlan0 | grep -Po 'inet / K [d.]+'")
tulosta (teken2)
s.stuur_instructie (0xc0)
kirjain2 teken2:
s.stuur_teken (letter2)
jos _nimi_ == '_main_': #ohjelma alkaa tästä
yrittää:
pää ()
paitsi näppäimistö Keskeytys:
kulkea
Sitten voimme luoda palvelun LCD-näytön käynnistämiseksi käynnistyksen yhteydessä.
Suositeltava:
WetRuler-Merenpinnan korkeuden mittaaminen: 8 vaihetta (kuvilla)
WetRuler-Meren valtameren korkeuden mittaaminen: Ilmoitus tuli alkukesästä, että Prinssi William Soundiksi kutsuttu Alaskan alue osuu odottamatta ilmaston lämpenemisen aiheuttamaan tsunamiin. Löytöksen tehneet tutkijat viittasivat nopeasti vetäytyvän jään alueeseen, joka
Maaperän kosteuden mittaaminen Raspberry Pi -laitteella 4: 4 askelta
Maaperän kosteuden mittaaminen Raspberry Pi 4: llä: Tiedätkö kuinka usein kastaa kasveja? Tai vuotanut kasveja ja menettänyt ne. Tämän ratkaisemiseksi ajattelin, että olisi epäolennaisempaa, jos saisimme maaperän vesipitoisuuden arvon, jotta voimme tehdä päätöksen kasvien kastelusta
Kondensaattorin tai induktorin mittaaminen MP3 -soittimella: 9 vaihetta
Kondensaattorin tai induktorin mittaaminen MP3 -soittimella: Tässä on yksinkertainen tekniikka, jolla voidaan mitata tarkasti kondensaattorin ja induktorin kapasitanssi ja induktanssi ilman kalliita laitteita. Mittaustekniikka perustuu tasapainoiseen siltaan, ja se voidaan rakentaa helposti epäselvästä
TrigonoDuino - Etäisyyden mittaaminen ilman anturia: 5 vaihetta
TrigonoDuino - Kuinka mitata etäisyys ilman anturia: Tämä projekti on suunniteltu etäisyyden mittaamiseen ilman kaupallista anturia. Se on projekti trigonometristen sääntöjen ymmärtämiseksi konkreettisella ratkaisulla. Sitä voidaan mukauttaa johonkin muuhun trigonometriseen laskentaan. Cos Sin ja muut toimivat
Maaperän kosteuden mittaaminen Esp32- ja Thingsio.ai -alustan avulla: 6 vaihetta
Maaperän kosteuden mittaaminen Esp32: n ja Thingsio.ai -alustan avulla: Tässä opetusohjelmassa aion selittää maaperän kosteuspitoisuuden lukemisen käyttämällä esp32: ta ja sitten lähettää arvot Thingsio.ai IoT -pilvialustaan