Мазмұны:

ESP32 көмегімен скрипкада саусақтардың орналасуын өлшеу: 6 қадам
ESP32 көмегімен скрипкада саусақтардың орналасуын өлшеу: 6 қадам

Бейне: ESP32 көмегімен скрипкада саусақтардың орналасуын өлшеу: 6 қадам

Бейне: ESP32 көмегімен скрипкада саусақтардың орналасуын өлшеу: 6 қадам
Бейне: Использование термопары MAX6675 с ESP32 Bluetooth 2024, Шілде
Anonim
ESP32 көмегімен скрипкада саусақтардың күйін өлшеу
ESP32 көмегімен скрипкада саусақтардың күйін өлшеу
ESP32 көмегімен скрипкада саусақтардың күйін өлшеу
ESP32 көмегімен скрипкада саусақтардың күйін өлшеу

Скрипкада ойнайтын адам ретінде мен саусақтарымның скрипкадағы орналасуын дәл көрсететін қосымшаны немесе құралды әрқашан қалайтынмын. Бұл жобамен мен оны құруға тырыстым. Бұл прототип болса да, сіз көптеген мүмкіндіктерді қоса аласыз.

Мен сондай -ақ ESP32 мен rPI -ді ажыратуға тырыстым, сондықтан мен ESP32 -ді rPi -ге сымсыз жіберуге мүмкіндік бердім. Мүмкін бұл жобаның ең қиын жері.

Бұл жобаның соңында сіздің компьютерде ештеңе сақталмауы өте маңызды, бірақ ол rPI немесе ESP32 -де.

1 -қадам: материалдар мен құралдар

Құралдар мен материалдар
Құралдар мен материалдар

Бұл жобаны құрудың ерекшеліктерімен таныспас бұрын бізге бірнеше нәрсе қажет.

  1. 4x Lineer Softpot: саусақ қалпын өлшеуге арналған сызықтық потенциометрлер (скрипкада 4 ішекті)
  2. ESP32: Сызықтық жұмсақ нүктелерден деректерді оқуға арналған ESP32 модулі.
  3. 4/4 скрипка: сызықтық жұмсақ нүктелерді үстіне қоюға арналған скрипка.
  4. SD картасы бар Raspberry Pi: біздің мәліметтер базасы мен веб -сайтты сақтайтын таңқурай pi.
  5. 10к потенциометр: СКД жарықтығына арналған потенциометр
  6. СКД экраны: rPi IP адрестерін көрсетуге арналған СКД экраны
  7. Дәнекерлеу жиынтығы: барлық элементтерді дәнекерлеуге арналған
  8. Еркек-еркек сымдары мен ер-әйел сымдары: Барлық элементтерді қосуға арналған кабельдер
  9. Микро USB кабелі: ESP32 қосуға арналған

2 -қадам: жұмсақ нүктелерді ESP32 -ге қосу

Жұмсақ нүктелерді ESP32 -ге қосу
Жұмсақ нүктелерді ESP32 -ге қосу

Ең алдымен, біз жұмсақ нүктелерімізді esp32 -ге қосуымыз керек. Біз сол және оң жақ түйреуіштерді сәйкесінше 5V және GND -ге қосамыз. Біз ортаңғы істікті ESP32 аналогтық істікшеге қосамыз. Біз сондай -ақ 10k Ом кедергісі бар ортаңғы істікті жалғап, оны GND -ге қосуымыз керек. Бұл біздің жұмсақ нүктелердің шығысы кездейсоқ мәнді қайтармауы үшін.

Содан кейін біз ESP32 -ді микро -USB кабелі арқылы компьютерге қосамыз, осылайша біз оған кодты жүктей аламыз. Біз ESP32 бағдарламалау үшін Arduino IDE қолданамыз. Бірақ алдымен біз ESP32 үшін Arduino ядросын орнатуымыз керек, сонда біз оны жүктей аламыз. Мұны осында жасауға болады.

Содан кейін біз кодты жаза бастаймыз.

Алдымен біз жұмсақ нүктелердің ортаңғы түйреуішін қосқан түйреуіштерді тағайындауымыз керек.

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;

Содан кейін біз түйреуіштерді орната аламыз. Және бізге сериялық монитор мен уақытты бастау керек.

жарамсыз орнату () {

onTime = millis ();

Serial.begin (115200);

Serial.println («Бағдарламаның басталуы»);

pinMode (SOFT_POT_PIN1, INPUT);

pinMode (SOFT_POT_PIN2, INPUT);

pinMode (SOFT_POT_PIN3, INPUT);

pinMode (SOFT_POT_PIN4, INPUT); }

жарамсыз 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] = softpot;

pdata [2] = миллис ();

} } }

}

3 -қадам: ESP32 мен RPI сымсыз қосылу

ESP32 және RPI сымсыз қосылу үшін біз websocket деп аталатын кітапхананы қолданамыз. Бұл кітапхананы орнату үшін біз файлдарды осы жерден ала аламыз. Бұл кітапхананы ESP32 үшін пайдалану үшін бізге файлдардың кейбір кодын өзгерту қажет болады.

Бізге MD5.c және MD5.h.

  • MD5Init - MD5InitXXX
  • MD5Unddate to MD5UpdateXXX
  • MD5Final to 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;

Біздің Wi -Fi серверін тағайындау

WiFiServer сервері (80);

Біздің веб -сервер серверін іске қосу

WebSocketServer webSocketServer;

Біздің SSID пен Wi -Fi құпия сөзін тағайындау

const char* ssid = «сіздің Wi -Fi SSID»;

const char* password = «сіздің WiFi құпия сөзіңіз»;

жарамсыз орнату () {

Сериялық мониторды орнату

Serial.begin (115200);

Жұмсақ нүктелерді реттеу

pinMode (SOFT_POT_PIN1, INPUT);

pinMode (SOFT_POT_PIN2, INPUT);

pinMode (SOFT_POT_PIN3, INPUT);

pinMode (SOFT_POT_PIN4, INPUT);

Біздің Wi -Fi желісін іске қосу және оған қосылу

WiFi.begin (ssid, құпия сөз);

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

кешіктіру (1000);

Serial.println («WiFi желісіне қосылу..»); }

Serial.println («WiFi желісіне қосылған»);

Serial.println (WiFi.localIP ());

server.begin (); кешіктіру (100); }

жарамсыз 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 ());

}

void loop () {

Клиентті қосу (rPI)

WiFiClient клиенті = server.available ();

if (client.connected ()) {

кешіктіру (10);

if (webSocketServer.handshake (клиент)) {

Serial.println («Клиент қосылған»);

Деректерді жіберу және алу.

while (client.connected ()) {

char деректері [30];

getdata (деректер);

Serial.println (деректер);

webSocketServer.sendData (деректер);

кешіктіру (10); // Деректерді дұрыс қабылдау үшін кідіріс қажет}

Serial.println («Клиент ажыратылды»);

кешіктіру (100); }

басқа {

Serial.println («shitsfuckedyo»);

} } }

Содан кейін python ішіндегі rPI үшін:

Біздің кітапханаларды импорттау

веб -сайтты импорттау уақыты

Глобальды вариабельді тағайындау i

мен = 0

Біз қабылдай алатын ең көп 200 хабарды орнату

nrOfMessages = 200

сынып Websocket ():

def _init _ (өзін):

Веб -ұяшықты инициализациялау және оны ESP32 -ге қосу

self.ws = websocket. WebSocket ()

self.ws.connect («ws: //172.30.248.48/»)

Біздің деректерді алу

жұмыс (өзіндік):

self.ws.send («хабарлама нөмірі: 0»)

result = self.ws.recv () time.sleep (0.5) нәтижесін қайтарады

Барлығын алғаннан кейін веб -торапты жабу

def close (өзінше):

self.ws.close ()

4 -қадам: Сіздің веб -сайт пен дерекқорды қосу

Біздің Деректер базасы мен веб -сайтты қосуға келетін болсақ, сізге алдымен mariadb: sudo apt install mariadb орнату арқылы pi -де мәліметтер базасын құру қажет болады.

Содан кейін сіз оған қол жеткізе аласыз: sudo mariadb.

Содан кейін сіз өзіңіздің веб -сайтыңызды жасауыңыз керек. Сіз мұны қалағаныңызша жасай аласыз, бірақ сіз Flask -ды пайдалануыңыз керек және сіздің деректеріңізді тоқтату және бастау үшін HTML -де форма болуы керек.

Содан кейін сіз бұл кодты дерекқорыңыз бен веб -сайтыңызды қосу үшін кірістіре аласыз (сіздің веб -сайтыңыз да, мәліметтер базасы да pi -де болуы керек, мұны pycharm параметрлеріндегі орналастыру қойындысын пайдалану арқылы жасауға болады)

flaskext.mysql -дан MySQL импорттау

app.config [«MYSQL_DATABASE_HOST»] = «жергілікті хост»

app.config [«MYSQL_DATABASE_DB»] = «сіздің мәліметтер базасының атауы»

app.config [«MYSQL_DATABASE_USER»] = «сіздің дерекқор пайдаланушысы»

app.config [«MYSQL_DATABASE_PASSWORD»] = «дерекқордың құпия сөзі»

Біздің мәліметтер қорынан мәліметтерді алу функциясы.

def get_data (sql, params = Жоқ):

conn = mysql.connect ()

курсор = қосылу курсоры ()

басып шығару («деректерді алу»)

тырысу:

басып шығару (sql)

cursor.execute (sql, параметрлер)

e сияқты ерекшеліктерді қоспағанда:

басып шығару (e)

жалған қайтару

нәтиже = cursor.fetchall ()

деректер =

нәтижедегі жол үшін:

data.append (тізім (жол))

cursor.close ()

Conn.close ()

деректерді қайтару

Біздің мәліметтер қорына деректерді енгізу функциясы

def set_data (sql, params = Жоқ):

conn = mysql.connect ()

курсор = қосылу курсоры ()

тырысу:

log.debug (sql)

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

log.debug («SQL uitgevoerd»)

e сияқты ерекшеліктерді қоспағанда:

log.exception («SQL sql: {0})» форматы (e))

жалған қайтару

cursor.close ()

Conn.close ()

True қайтару

Сондай -ақ, сіз жазба кезінде басқа нәрселерді жасай алатындай етіп біздің қосымшаны өңдеуіміз қажет.

сынып ThreadedTask (threading. Thread):

def _init _ (өзін,):

Жіпті реттеу

жіп. Жіп._ init _ (өзін -өзі)

Барлық алынған деректерді сақтау үшін тізім құру

self.data_all =

def run (өзінше):

уақыт.ұйықтау (5)

Деректерді алатын жеке питон кодын импорттаңыз

receive_websocket импорттау

Деректеріңізді алыңыз

w = алу_жебесі. Вебсокет ()

Деректерді тізімге қосыңыз және басып шығарыңыз.

i ауқымында (0, 200):

self.data_all.append (w.work (). split («,»))

басып шығару (self.data_all)

тапсырма = ThreadedTask ()

Содан кейін сіз Thread -ті бастау және деректерді қабылдауды бастау үшін task.run () жасай аласыз.

5 -қадам: Барлығын біріктіру

Бәрін бірге қосу
Бәрін бірге қосу

Pi сайтынан веб -сайтты іске қосу үшін сізге қызметті пайдалану қажет:

[Unit] Description = Project1 веб -интерфейсіне қызмет көрсететін uWSGI данасы

= Network.target кейін

BindsTo = mysqld.service

= Mysqld.service кейін

[Қызмет]

Пайдаланушыға өзгертіңіз

Пайдаланушы = pi

Топ = www-деректер

Мұнда сіз Flask файлының каталогын енгізуіңіз керек

WorkingDirectory =/home/pi/project1/web

Ini файлының каталогы, оны кейін табуға болады.

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

[Орнату]

WantedBy = multi-user.target

uwsgi-flask.ini файлын жоғарыда ExecStart-те көрсетілген каталогқа орналастыру қажет

[uwsgi] модуль = веб: қолданба virtualenv =/home/pi/project1/env

шебер = ақиқат процестер = 5

плагиндер = python3

розетка = жоба1. шұлық chmod-socket = 660 вакуум = ақиқат

мерзімді түрде өлу = ақиқат

Енді сіз өзіңіздің деректеріңізді оқи аласыз және оны веб -сайтта көрсете аласыз.

6 -қадам: Қосымша: СКД экранын қосу

Қосымша: СКД экранды қосу
Қосымша: СКД экранды қосу
Қосымша: СКД экранды қосу
Қосымша: СКД экранды қосу
Қосымша: СКД экранды қосу
Қосымша: СКД экранды қосу

Біз СКД экранды қосамыз, осылайша біздің веб-сайтқа Pi адресін көрсете аламыз.

GPO импорт уақыты ретінде RPi. GPIO импорттау

импорттау командалары

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 _ (өзін):

GPIO.setmode (GPIO. BCM)

self.setup ()

#Функциялардың жиынтығы self.stuur_instructie (0x3f) #Дисплей self.stuur_instructie (0x0c) #On + меңзердің өзіндік.stuur_instructie (0x01) @staticmethod def setup (): GPIO.setup (тізім, GPIO. OUT) GPIO.setup ([E, RS], GPIO. OUT)

def stuur_instructie (өзіндік, байт):

GPIO. шығысы (E, GPIO. HIGH)

GPIO. шығысы (RS, GPIO. LOW)

self.set_GPIO_bits (байт)

уақыт.ұйқы (0.005)

GPIO. шығысы (E, GPIO. LOW)

def stuur_teken (өзінше, char):

temp = ord (char)

GPIO. шығысы (E, GPIO. HIGH)

GPIO. шығысы (RS, GPIO. HIGH)

self.set_GPIO_bits (temp)

уақыт.ұйқы (0.005)

GPIO. шығысы (E, GPIO. LOW)

def set_GPIO_bits (өзіндік, байт):

i үшін диапазонда (0, 8):

егер (байт & (2 ** i)) == 0:

GPIO.output (тізім , GPIO. LOW)

басқа:

GPIO.output (тізім , GPIO. HIGH)

def main ():

s = Экран ()

teken = «Жергілікті IP мекенжайы:»

текендегі хат үшін:

s.stuur_teken (хат)

teken2 = commands.getoutput («ip addr show wlan0 | grep -Po 'inet / K [d.]+'»)

басып шығару (teken2)

s.stuur_instructie (0xc0)

teken2 ішіндегі 2 -әріп үшін:

s.stuur_teken (2 -әріп)

if _name_ == '_main_': #Бағдарлама осы жерден басталады

тырысу:

негізгі ()

KeyboardInterrupt қоспағанда:

өту

Содан кейін біз СКД іске қосылған кезде қосу қызметін жасай аламыз.

Ұсынылған: