Orodha ya maudhui:
- Hatua ya 1: Vifaa na Zana
- Hatua ya 2: Kuunganisha Softpots kwa ESP32
- Hatua ya 3: Kuunganisha ESP32 na RPI bila waya
- Hatua ya 4: Kuunganisha Wavuti yako na Hifadhidata
- Hatua ya 5: Kuunganisha Kila kitu Pamoja
- Hatua ya 6: Ziada: Kuunganisha Skrini ya LCD
Video: Kupima Nafasi za Vidole kwenye Vurugu na ESP32: Hatua 6
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:53
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
Kabla ya kuingia katika maalum ya kujenga mradi huu tunahitaji vitu vichache.
- 4x Laini ya Laini: Potentiometers zenye urefu wa kupima msimamo wa kidole (violin ina nyuzi 4)
- ESP32: Moduli ya ESP32 kusoma data kutoka kwa laini laini.
- violin 4/4: violin ili kuweka laini laini juu.
- Pi ya Raspberry na kadi ya SD: pi ya raspberry ambayo itahifadhi hifadhidata yetu na wavuti.
- 10k potentiometer: potentiometer kwa mwangaza wa LCD
- Screen ya LCD: skrini ya LCD kuonyesha ip ipresres ya rPi
- Kitanda cha Soldering: Kwa kugawanya vitu vyote togheter
- Waya wa kiume na wa kiume na waya wa kiume na wa kike: nyaya za kuunganisha vitu vyote
- Cable ndogo ya USB: Kwa kuwezesha ESP32
Hatua ya 2: 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
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
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:
Tachometer / kupima kupima Kutumia Arduino, OBD2, na CAN Bus: 8 Hatua
Upimaji wa Tachometer / Scan Kutumia Arduino, OBD2, na CAN Bus: Wamiliki wowote wa Toyota Prius (au mseto / gari maalum) watajua kuwa dashibodi zao zinaweza kukosa simu chache! Ubora wangu hauna RPM ya injini au kupima joto. Ikiwa wewe ni mtu wa utendaji, unaweza kutaka kujua vitu kama mapema ya muda na
Saa ya Cosmo - Inabadilisha Rangi Kila Wakati Mwanaanga Anaingia Kwenye Nafasi: Hatua 8 (na Picha)
Saa ya Cosmo - Inabadilisha Rangi Kila Wakati Mwanaanga Anaingia Kwenye Nafasi: Halo! Je! Wewe ni mpenzi wa nafasi? Ikiwa ndio basi hi-fi! Ninapenda nafasi na unajimu. Ni wazi mimi sio mwanaanga kwenda huko juu na kuangalia kwa karibu ulimwengu. Lakini kila wakati ninapogundua kuwa mtu kutoka duniani amesafiri kwenda mbinguni, napata msukumo
Wavamizi wa LCD: Wavamizi wa nafasi kama mchezo kwenye 16x2 Uonyesho wa Tabia ya LCD: Hatua 7
Wavamizi wa LCD: Wavamizi wa Nafasi Kama Mchezo kwenye 16x2 Uonyesho wa Tabia ya LCD: Hakuna haja ya kuanzisha mchezo wa hadithi wa "Wavamizi wa Nafasi". Kipengele cha kufurahisha zaidi cha mradi huu ni kwamba hutumia onyesho la maandishi kwa pato la picha. Inafanikiwa kwa kutekeleza herufi 8 maalum. Unaweza kupakua Arduino kamili
Kukua Lettuce Zaidi katika Nafasi Ndogo Au Kukua Lettuce katika Nafasi, (Zaidi au Chini): Hatua 10
Kukua Lettuce Zaidi katika Nafasi Ndogo Au … Kukua Lettuce katika Anga, (Zaidi au Chini): Hii ni uwasilishaji wa kitaalam kwa Shindano la Kukuza Zaidi ya Dunia, Mashindano ya Watengenezaji, iliyowasilishwa kupitia Maagizo. Sikuweza kuwa na msisimko zaidi kuwa nikibuni utengenezaji wa mazao ya nafasi na kutuma Instructable yangu ya kwanza.Kuanza, shindano lilituuliza
Boresha Uzinduzi wa Nafasi Yako na Kitufe cha Kuweka Kimwili kwa Mpango wa Nafasi ya Kerbal: Hatua 6
Boresha Uzinduzi wa Nafasi Yako na Kitufe cha Kuweka Nafasi Kimwili kwa Programu ya Nafasi ya Kerbal: Hivi majuzi nilichukua toleo la onyesho la Programu ya Nafasi ya Kerbal. Programu ya Nafasi ya Kerbal ni mchezo wa simulator ambao hukuruhusu kubuni na kuzindua roketi na kuzunguka hadi miezi na sayari za mbali. Bado ninajaribu kutua kwa mafanikio kwenye mwezi (o