![ESP32 көмегімен скрипкада саусақтардың орналасуын өлшеу: 6 қадам ESP32 көмегімен скрипкада саусақтардың орналасуын өлшеу: 6 қадам](https://i.howwhatproduce.com/images/001/image-31-171-j.webp)
Мазмұны:
2025 Автор: John Day | [email protected]. Соңғы өзгертілген: 2025-01-23 14:51
![ESP32 көмегімен скрипкада саусақтардың күйін өлшеу ESP32 көмегімен скрипкада саусақтардың күйін өлшеу](https://i.howwhatproduce.com/images/001/image-31-172-j.webp)
![ESP32 көмегімен скрипкада саусақтардың күйін өлшеу ESP32 көмегімен скрипкада саусақтардың күйін өлшеу](https://i.howwhatproduce.com/images/001/image-31-173-j.webp)
Скрипкада ойнайтын адам ретінде мен саусақтарымның скрипкадағы орналасуын дәл көрсететін қосымшаны немесе құралды әрқашан қалайтынмын. Бұл жобамен мен оны құруға тырыстым. Бұл прототип болса да, сіз көптеген мүмкіндіктерді қоса аласыз.
Мен сондай -ақ ESP32 мен rPI -ді ажыратуға тырыстым, сондықтан мен ESP32 -ді rPi -ге сымсыз жіберуге мүмкіндік бердім. Мүмкін бұл жобаның ең қиын жері.
Бұл жобаның соңында сіздің компьютерде ештеңе сақталмауы өте маңызды, бірақ ол rPI немесе ESP32 -де.
1 -қадам: материалдар мен құралдар
![Құралдар мен материалдар Құралдар мен материалдар](https://i.howwhatproduce.com/images/001/image-31-174-j.webp)
Бұл жобаны құрудың ерекшеліктерімен таныспас бұрын бізге бірнеше нәрсе қажет.
- 4x Lineer Softpot: саусақ қалпын өлшеуге арналған сызықтық потенциометрлер (скрипкада 4 ішекті)
- ESP32: Сызықтық жұмсақ нүктелерден деректерді оқуға арналған ESP32 модулі.
- 4/4 скрипка: сызықтық жұмсақ нүктелерді үстіне қоюға арналған скрипка.
- SD картасы бар Raspberry Pi: біздің мәліметтер базасы мен веб -сайтты сақтайтын таңқурай pi.
- 10к потенциометр: СКД жарықтығына арналған потенциометр
- СКД экраны: rPi IP адрестерін көрсетуге арналған СКД экраны
- Дәнекерлеу жиынтығы: барлық элементтерді дәнекерлеуге арналған
- Еркек-еркек сымдары мен ер-әйел сымдары: Барлық элементтерді қосуға арналған кабельдер
- Микро USB кабелі: ESP32 қосуға арналған
2 -қадам: жұмсақ нүктелерді ESP32 -ге қосу
![Жұмсақ нүктелерді ESP32 -ге қосу Жұмсақ нүктелерді ESP32 -ге қосу](https://i.howwhatproduce.com/images/001/image-31-175-j.webp)
Ең алдымен, біз жұмсақ нүктелерімізді 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 -қадам: Барлығын біріктіру
![Бәрін бірге қосу Бәрін бірге қосу](https://i.howwhatproduce.com/images/001/image-31-176-j.webp)
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 -қадам: Қосымша: СКД экранын қосу
![Қосымша: СКД экранды қосу Қосымша: СКД экранды қосу](https://i.howwhatproduce.com/images/001/image-31-177-j.webp)
![Қосымша: СКД экранды қосу Қосымша: СКД экранды қосу](https://i.howwhatproduce.com/images/001/image-31-178-j.webp)
![Қосымша: СКД экранды қосу Қосымша: СКД экранды қосу](https://i.howwhatproduce.com/images/001/image-31-179-j.webp)
Біз СКД экранды қосамыз, осылайша біздің веб-сайтқа 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 қоспағанда:
өту
Содан кейін біз СКД іске қосылған кезде қосу қызметін жасай аламыз.
Ұсынылған:
Arduino көмегімен қозғалтқыш жылдамдығын өлшеу: 6 қадам
![Arduino көмегімен қозғалтқыш жылдамдығын өлшеу: 6 қадам Arduino көмегімен қозғалтқыш жылдамдығын өлшеу: 6 қадам](https://i.howwhatproduce.com/images/001/image-91-j.webp)
Arduino көмегімен қозғалтқыш жылдамдығын өлшеу: қозғалтқыштың айналу жиілігін өлшеу қиын ба? Мен олай ойламаймын. Қарапайым шешімдердің бірі - сіздің жинағыңыздағы бір ғана IR сенсоры мен Arduino мұны істей алады. Бұл жазбада мен IR сенсоры мен А көмегімен кез келген қозғалтқыштың айналу жиілігін өлшеуді түсіндіретін қарапайым оқулық беремін
Пернетақтаның ағылшын тілінен басқа орналасуын білу үшін Python-ды қолдану: 8 қадам
![Пернетақтаның ағылшын тілінен басқа орналасуын білу үшін Python-ды қолдану: 8 қадам Пернетақтаның ағылшын тілінен басқа орналасуын білу үшін Python-ды қолдану: 8 қадам](https://i.howwhatproduce.com/images/001/image-147-17-j.webp)
Пернетақтаның ағылшын емес орналасуын білу үшін Python-ды қолдану: Сәлеметсіз бе, мен Джулиенмін! Мен информатика мамандығының студентімін, бүгін мен сізге Python көмегімен ағылшын тілінен басқа пернетақтаның орналасуын үйретуге болатынын көрсетемін. Қазіргі уақытта интернетте көптеген тіл үйрену жүріп жатыр, және адамдар бір нәрсені біле алады
Пойыз моделінің орналасуын басқару тақтасының көмегімен басқарыңыз!: 12 қадам
![Пойыз моделінің орналасуын басқару тақтасының көмегімен басқарыңыз!: 12 қадам Пойыз моделінің орналасуын басқару тақтасының көмегімен басқарыңыз!: 12 қадам](https://i.howwhatproduce.com/images/005/image-12875-j.webp)
Пойыздың модельдік орналасуын пернетақтаның көмегімен басқарыңыз!: Мен алдыңғы нұсқаулықтың бірінде теледидардың пульті арқылы модельдік пойызды қалай басқаруға болатынын көрсеттім. Жаңартылған нұсқаны мына жерден тексеруге болады. Бұл нұсқаулықта мен сізге пернетақтаның көмегімен пойыздың макетін қалай басқаруға болатынын көрсетемін
Тұрақты ток қозғалтқышының орналасуын бақылау: 5 қадам
![Тұрақты ток қозғалтқышының орналасуын бақылау: 5 қадам Тұрақты ток қозғалтқышының орналасуын бақылау: 5 қадам](https://i.howwhatproduce.com/images/010/image-27046-j.webp)
Тұрақты ток қозғалтқышының орналасуын бақылау: Бұл нұсқаулық жергілікті желінің көмегімен қозғалтқыштың орналасуын бақылауды көрсетеді. Енді сіз желіге қосылған смартфонды немесе iPad -ты қолдана аласыз, содан кейін мотордың жергілікті веб -серверінің мекен -жайын теріңіз Осы жерден біз қозғалтқыштың орналасу дискісін айналдыру арқылы басқара аламыз
Экологиялық таза, биік саусақтардың таңғажайып тақтасы: 4 қадам
![Экологиялық таза, биік саусақтардың таңғажайып тақтасы: 4 қадам Экологиялық таза, биік саусақтардың таңғажайып тақтасы: 4 қадам](https://i.howwhatproduce.com/preview/how-and-what-to-produce/10965507-eco-friendly-geeky-thumb-tack-board-of-awesomeness-4-steps-j.webp)
Экологиялық таза, саусақпен қараудың керемет тақтасы: кеңседе жасыл болып тұрғанда адамдарды сыртқа шығаруға тырысады ма? Бұл нұсқаулық сізге арналған! Бұл нұсқаулық сізге микрочиптерден саусақтарды қалай салу керектігін көрсетеді. Мен бұл ойды көктемгі тазалық кезінде қажетсіз заттарды іздеу кезінде алдым, және