Orodha ya maudhui:

Kupima Nafasi za Vidole kwenye Vurugu na ESP32: Hatua 6
Kupima Nafasi za Vidole kwenye Vurugu na ESP32: Hatua 6

Video: Kupima Nafasi za Vidole kwenye Vurugu na ESP32: Hatua 6

Video: Kupima Nafasi za Vidole kwenye Vurugu na ESP32: Hatua 6
Video: UKIONA DALILI HIZI 9 WIKI 2 BAADA YA KUJAMIIANA KAPIME UKIMWI HARAKA HUENDA UMEAMBUKIZWA 2024, Julai
Anonim
Kupima Nafasi za Vidole kwenye Ukiukaji Na ESP32
Kupima Nafasi za Vidole kwenye Ukiukaji Na ESP32
Kupima Nafasi za Vidole kwenye Vurugu na ESP32
Kupima Nafasi za Vidole kwenye Vurugu na ESP32

Kama mchezaji wa violin siku zote nilitaka programu au zana ambayo inaweza kunionyeshea msimamo wa vidole vyangu kwenye violin kabisa. Na mradi huu nilijaribu kujenga hii. Ingawa hii ni mfano na bado unaweza kuongeza huduma nyingi.

Nilijaribu pia kutenganisha ESP32 na rPI na kwa hivyo nikafanya ESP32 kutuma data isiyo na waya kwa rPi. Jambo ambalo labda ni jambo gumu zaidi kuhusu mradi huu.

Pia ni muhimu sana kwamba mwisho wa mradi huu hakuna chochote kilichohifadhiwa kwenye kompyuta yako lakini ni kwenye rPI au ESP32.

Hatua ya 1: Vifaa na Zana

Vifaa na Zana
Vifaa na Zana

Kabla ya kuingia katika maalum ya kujenga mradi huu tunahitaji vitu vichache.

  1. 4x Laini ya Laini: Potentiometers zenye urefu wa kupima msimamo wa kidole (violin ina nyuzi 4)
  2. ESP32: Moduli ya ESP32 kusoma data kutoka kwa laini laini.
  3. violin 4/4: violin ili kuweka laini laini juu.
  4. Pi ya Raspberry na kadi ya SD: pi ya raspberry ambayo itahifadhi hifadhidata yetu na wavuti.
  5. 10k potentiometer: potentiometer kwa mwangaza wa LCD
  6. Screen ya LCD: skrini ya LCD kuonyesha ip ipresres ya rPi
  7. Kitanda cha Soldering: Kwa kugawanya vitu vyote togheter
  8. Waya wa kiume na wa kiume na waya wa kiume na wa kike: nyaya za kuunganisha vitu vyote
  9. Cable ndogo ya USB: Kwa kuwezesha ESP32

Hatua ya 2: Kuunganisha Softpots kwa ESP32

Kuunganisha Softpots kwa ESP32
Kuunganisha Softpots kwa ESP32

Kwanza kabisa tunahitaji kuunganisha laini zetu kwenye esp32. Tunaunganisha pini za kushoto na kulia kwa 5V na GND mtawaliwa. Tunaunganisha pini ya kati na pini ya analog kwenye ESP32. Tunahitaji pia kuunganisha pini ya kati na upinzani wa 10k ohm na unganisha hii kwa GND. Hii ni ili uzalishaji wetu wa laini usirudishe thamani ya nasibu.

Kisha tunaunganisha ESP32 na kebo ndogo ya usb kwenye pc yetu ili tuweze kuipakia nambari hiyo. Tutatumia Arduino IDE kwa programu ya ESP32. Lakini kwanza tunahitaji kusanikisha msingi wa Arduino kwa ESP32 ili tuweze kuipakia. Hii inaweza kufanywa hapa.

Basi tunaweza kuanza kuandika nambari.

Kwanza tunahitaji kupeana pini zetu ambazo tuliunganisha pini yetu ya kati ya laini.

const int SOFT_POT_PIN1 = 34;

const int SOFT_POT_PIN2 = 35;

const int SOFT_POT_PIN3 = 32;

const int SOFT_POT_PIN4 = 33;

unsigned muda mrefu onTime;

lainiPotTime ndefu isiyosainiwa;

Basi tunaweza kuanzisha pini zetu. Na tunahitaji kuanza mfuatiliaji wetu wa serial na wakati wetu.

usanidi batili () {

onTime = milimita ();

Serial. Kuanza (115200);

Serial.println ("Programu ya kuanza");

pinMode (SOFT_POT_PIN1, INPUT);

pinMode (SOFT_POT_PIN2, INPUT);

pinMode (SOFT_POT_PIN3, INPUT);

pinMode (SOFT_POT_PIN4, INPUT); }

utupu wa data (byte pdata ) {

// Soma kwa thamani ya sufuria ya ADC ya sufuria laini

Kisha tunahitaji kusoma pini zetu ili tuweze kupokea data zetu.

int softPotADC1 = AnalogSoma (SOFT_POT_PIN1);

nt softPotADC2 = AnalogSoma (SOFT_POT_PIN2);

int softPotADC3 = AnalogSoma (SOFT_POT_PIN3);

int softPotADC4 = AnalogSoma (SOFT_POT_PIN4);

Kisha tunaweka maadili kwenye orodha ili tuweze kuipatia kwa urahisi baadaye.

kwa (int i = 0; i <4; i ++) {

majina ya int = {softPotADC1, softPotADC2, lainiPotADC3, lainiPotADC4};

int softpot = Majina ;

ikiwa (laini)> 10) {

pdata [0] = i;

pdata [1] = laini;

pdata [2] = millis ();

} } }

}

Hatua ya 3: Kuunganisha ESP32 na RPI bila waya

Kwa kuunganisha ESP32 na RPI bila waya, tutatumia maktaba inayoitwa websocket. Ili kusanikisha maktaba hii, tunaweza kupata faili hapa. Tutahitaji kubadilisha nambari fulani kwenye faili yenyewe ili kutumia maktaba hii kwa ESP32.

Tutahitaji kubadilisha MD5.c na MD5.h.

  • Ingiza MD5InitXXX
  • Sasisha kwa MD5UpdateXXX
  • Mwisho wa MD5 hadi MD5FinalXXX

Tutahitaji pia kufuta mistari ya avr / io.h kwenye faili za sha1.

Kisha tunaweza kuongeza maktaba kwa Arduino IDE yetu kwa mchoro> ni pamoja na maktaba> ongeza maktaba ya ZIP na kisha tunaweza kuchagua maktaba yako kwenye faili ya zip.

Baada ya hapo tunaweza kuanza kuandika nambari yetu.

Kwanza kwa ESP32:

Ikiwa ni pamoja na maktaba yetu

#jumuisha #jumuisha

Kuweka pini zetu tena.

const int SOFT_POT_PIN1 = 34;

const int SOFT_POT_PIN2 = 35;

const int SOFT_POT_PIN3 = 32;

const int SOFT_POT_PIN4 = 33;

Inateua seva yetu ya wifi

Seva ya WiFiServer (80);

Kuanzisha seva yetu ya wavuti

WebSocketServer mtandaoSocketServer;

Kumkabidhi SSID yetu na nywila ya wifi yako

const char * ssid = "wifi yako SSID";

const char * password = "nywila yako ya wifi";

usanidi batili () {

Kuanzisha mfuatiliaji wako wa serial

Serial. Kuanza (115200);

Kuanzisha laini zako

pinMode (SOFT_POT_PIN1, INPUT);

pinMode (SOFT_POT_PIN2, INPUT);

pinMode (SOFT_POT_PIN3, INPUT);

pinMode (SOFT_POT_PIN4, INPUT);

Kuanzisha wifi yetu na kuungana nayo

WiFi.anza (ssid, nywila);

wakati (WiFi.status ()! = WL_CONNECTED) {

kuchelewesha (1000);

Serial.println ("Kuunganisha kwa WiFi.."); }

Serial.println ("Imeunganishwa kwenye mtandao wa WiFi");

Serial.println (WiFi.localIP ());

kuanza server) (); kuchelewesha (100); }

utupu wa data (char * pdata) {

Kusoma data yako

// Soma kwa thamani ya sufuria ya ADC ya sufuria laini

int softPotADC1 = AnalogSoma (SOFT_POT_PIN1);

int softPotADC2 = AnalogSoma (SOFT_POT_PIN2);

int softPotADC3 = AnalogSoma (SOFT_POT_PIN3);

int softPotADC4 = AnalogSoma (SOFT_POT_PIN4);

Kuweka data kwenye orodha na kuibadilisha kuwa hexadecimal.

sprintf (pdata, "% x,% x,% x,% x,% x", lainiPotADC1, lainiPotADC2, lainiPotADC3, lainiPotADC4, millis ());

}

kitanzi batili () {

Kuunganisha mteja wako (rPI)

Mteja wa Wateja wa WiFi = seva haipatikani ();

ikiwa (mteja. imeunganishwa ()) {

kuchelewesha (10);

ikiwa (webSocketServer.handshake (mteja)) {

Serial.println ("Mteja ameunganishwa");

Kutuma na kupokea data.

wakati (mteja. imeunganishwa ()) {

data ya char [30];

Getdata (data);

Serial.println (data);

webSocketServer.sendData (data);

kuchelewesha (10); // Kuchelewa kunahitajika kwa kupokea data kwa usahihi}

Serial.println ("Mteja ametengwa");

kuchelewesha (100); }

mwingine {

Serial.println ("shitsfuckedyo");

} } }

Halafu kwa rPI katika chatu:

Kuagiza maktaba zetu

kuagiza websocketimport wakati

Kupangilia aina ya globale i

i = 0

Kuweka upeo wa ujumbe 200 ambao tunaweza kupokea

nrOfMessages = 200

darasa Websocket ():

def _init _ (binafsi):

Kuanzisha tovuti yetu ya wavuti na kuiunganisha kwa ESP32 yetu

ubinafsi.ws = wavuti ya wavuti. WebSocket ()

unganisho la kibinafsi.ws ("ws: //172.30.248.48/")

Kupokea data zetu

def kazi (binafsi):

tuma barua pepe yako mwenyewe ("ujumbe nr: 0")

matokeo = self.ws.recv () time.sleep (0.5) matokeo ya kurudi

Kufunga wavuti ya wavuti baada ya kupokea kila kitu

def karibu (ubinafsi):

karibu.ws. karibu ()

Hatua ya 4: Kuunganisha Wavuti yako na Hifadhidata

Kuhusu kuunganisha Hifadhidata yetu na wavuti, kwanza kabisa utahitaji kuunda hifadhidata yako kwenye pi kwa kufunga mariadb: Sudo apt install mariadb.

Basi unaweza kuipata kwa kufanya: sudo mariadb.

Basi utahitaji pia kuunda wavuti yako. Unaweza kufanya hivi hata hivyo kama unavyopenda, lakini lazima utumie Flask na unahitaji kuwa na fomu katika HTML yako ya kusimamisha na kuanza data yako.

Kisha unaweza kuingiza nambari hii ili uunganishe hifadhidata yako na wavuti yako (tovuti yako yote na hifadhidata lazima iwe kwenye pi yako, hii inaweza kufanywa kwa kutumia kichupo cha kupelekwa katika mipangilio ya pycharm)

kutoka kwa flaskext.mysql kuagiza MySQL

app.config ["MYSQL_DATABASE_HOST"] = "mwenyeji wa ndani"

app.config ["MYSQL_DATABASE_DB"] = "jina lako la hifadhidata"

app.config ["MYSQL_DATABASE_USER"] = "mtumiaji wako wa hifadhidata"

app.config ["MYSQL_DATABASE_PASSWORD"] = "nywila yako ya hifadhidata"

Kazi ya kupata data nje ya hifadhidata yetu.

def get_data (sql, params = Hakuna):

kiunganishi = mysql.connect ()

mshale = koni.

chapa ("kupata data")

jaribu:

chapisha (sql)

mshale.execute (sql, params)

isipokuwa Isipokuwa kama e:

chapisha (e)

kurudi Uongo

matokeo = cursor.fetchall ()

data =

kwa safu katika matokeo:

data.append (orodha (safu))

mshale karibu ()

karibu ()

data kurudi

Kazi ya kuingiza data kwenye hifadhidata yetu

def set_data (sql, params = Hakuna):

kiunganishi = mysql.connect ()

mshale = koni.

jaribu:

logi kusuluhisha (sql)

mshale.execute (sql, params) conn.commit ()

log.debug ("SQL uitgevoerd")

isipokuwa Isipokuwa kama e:

log.exception ("Fout bij uitvoeren van sql: {0})". fomati (e))

kurudi Uongo

mshale karibu ()

karibu ()

kurudi Kweli

Tutahitaji pia kufunga maombi yetu ili uweze kufanya mambo mengine wakati unarekodi.

darasa ThreadedTask (threading. Thread):

def _init _ (binafsi,):

Kuanzisha uzi

threading. Thread._ init _ (binafsi)

Kuunda orodha ya kushikilia data zako zote ulizopokea

self.data_all =

def run (binafsi):

saa. kulala (5)

Ingiza nambari yako ya chatu ambapo data yako hupokea

kuagiza kupokea_websocket

Pokea data yako

w = pokea_weboxet. Websocket ()

Tumia data yako katika orodha yako na uichapishe.

kwa mimi katika anuwai (0, 200):

self.data_all.append (w.work (). split (","))

chapisha (self.data_all)

kazi = ThreadedTask ()

Basi unaweza kufanya task.run () kuanza Thread yako na kuanza kupokea data.

Hatua ya 5: Kuunganisha Kila kitu Pamoja

Kuunganisha Kila kitu Pamoja
Kuunganisha Kila kitu Pamoja

Kwa kuendesha wavuti yako kutoka kwa Pi yako lazima utumie huduma:

[Kitengo] Maelezo = mfano wa UWSGI kutumikia kiolesura cha wavuti1 cha mradi

Baada ya = mtandao

BindsTo = huduma ya mysqld

Baada ya = mysqld.service

[Huduma]

Badilisha kwa mtumiaji wako

Mtumiaji = pi

Kikundi = www-data

Hapa unapaswa kuingiza saraka yako ya faili yako ya Flask

WorkingDirectory = / nyumbani / pi / project1 / web

Saraka ya faili yako ya ini ambayo inaweza kupatikana baadaye.

ExecStart = / usr / bin / uwsgi --ini / nyumba/pi/project1/conf/uwsgi-flask.ini

[Sakinisha]

InayotarajiwaBy = multi-user.target

uwsgi-flask.ini ambayo unahitaji kuiweka kwenye saraka uliyobainisha katika ExecStart hapo juu

[uwsgi] moduli = wavuti: app virtualenv = / home / pi / project1 / env

bwana = michakato ya kweli = 5

programu-jalizi = python3

tundu = project1. angalia chmod-tundu = 660 utupu = kweli

kufa-kwa-muda = kweli

Sasa unaweza kusoma data yako na kuionyesha kwenye wavuti yako.

Hatua ya 6: Ziada: Kuunganisha Skrini ya LCD

Ziada: Kuunganisha Screen ya LCD
Ziada: Kuunganisha Screen ya LCD
Ziada: Kuunganisha Screen ya LCD
Ziada: Kuunganisha Screen ya LCD
Ziada: Kuunganisha Screen ya LCD
Ziada: Kuunganisha Screen ya LCD

Tunaweza kuunganisha skrini ya LCD ili tuweze kuonyesha anwani ya IP ya tovuti yetu.

kuagiza RPi. GPIO kama GPIOingiza wakati

kuagiza amri

Usafishaji wa GPIO ()

D0 = 22

D1 = 5

D2 = 6

D3 = 13

D4 = 19

D5 = 26

D6 = 20

D7 = 21

orodha = [22, 5, 6, 13, 19, 26, 20, 21]

E = 24

RS = 23

Screen darasa:

def _init _ (binafsi):

GPIO.setmode (GPIO. BCM)

kuanzisha.

#Function set self.stuur_instructie (0x3f) #Display self.stuur_instructie (0x0c) #On + cursor self.stuur_instructie (0x01) @staticmethod def setup (): GPIO.setup (orodha, GPIO. OUT) GPIO.setup ([E, RS], GPIO. OUT)

def stuur_instructie (binafsi, byte):

Pato la GPIO (E, GPIO. HIGH)

Pato la GPIO (RS, GPIO. LOW)

seti za kibinafsi. GPIO_biti (baiti)

wakati. kulala (0.005)

Pato la GPIO (E, GPIO. LOW)

def stuur_teken (kibinafsi, char):

temp = ord (char)

Pato la GPIO (E, GPIO. HIGH)

Pato la GPIO (RS, GPIO. HIGH)

self.set_GPIO_bits (muda)

wakati. kulala (0.005)

Pato la GPIO (E, GPIO. LOW)

def set_GPIO_bits (self, byte):

kwa mimi katika anuwai (0, 8):

ikiwa (byte & (2 ** i)) == 0:

Pato la GPIO (orodha , GPIO. LOW)

mwingine:

Pato la GPIO (orodha , GPIO. HIGH)

def kuu ():

s = Skrini ()

teken = "Anwani ya IP ya Mitaa:"

kwa barua katika teken:

s. stuur_teken (barua)

teken2 = amri. matokeo ("ip addr show wlan0 | grep -Po 'inet / K [ d.] +'")

chapisha (teken2)

s.stuur_instructie (0xc0)

kwa herufi2 katika teken2:

s. stuur_teken (barua2)

ikiwa _name_ == '_main_': #Program inaanzia hapa

jaribu:

kuu ()

isipokuwa KeyboardInterrupt:

kupita

Kisha tunaweza kuunda huduma ya kuanzisha LCD wakati wa kuanza.

Ilipendekeza: