Съдържание:
- Стъпка 1: Материали и инструменти
- Стъпка 2: Свързване на Softpots към ESP32
- Стъпка 3: Свържете безжично ESP32 и RPI
- Стъпка 4: Свързване на вашия уебсайт и база данни
- Стъпка 5: Свържете всичко заедно
- Стъпка 6: Допълнително: Свързване на LCD екран
Видео: Измерване на позициите на пръстите на цигулка с ESP32: 6 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
Като цигулар винаги съм искал приложение или инструмент, който да ми показва много точно позицията на пръстите ми върху цигулката. С този проект се опитах да го изградя. Въпреки че това е прототип и все още можете да добавите много функции.
Опитах се също да разделя ESP32 и rPI и по този начин накарах ESP32 да изпраща данни безжично към rPi. Което е може би най -трудното нещо в този проект.
Също така е много важно, че в края на този проект нищо не се съхранява на вашия компютър, но е или на rPI, или на ESP32.
Стъпка 1: Материали и инструменти
Преди да навлезем в спецификата на изграждането на този проект, се нуждаем от няколко неща.
- 4x Linear Softpot: Линейни потенциометри за измерване на позицията на пръста (цигулката има 4 струни)
- ESP32: ESP32 модул за четене на данните от линейните софтуерни точки.
- 4/4 цигулка: цигулка за поставяне на линейните софтпотове отгоре.
- Raspberry Pi със SD карта: малинов pi, който ще съхранява нашата база данни и уебсайт.
- 10k потенциометър: потенциометър за яркостта на LCD дисплея
- LCD екран: LCD екран за показване на ip адресите на rPi
- Комплект за запояване: За запояване на всички елементи заедно
- Проводници от мъжки към мъжки и от мъжки към женски проводници: кабели за свързване на всички елементи
- Micro USB кабел: За захранване на ESP32
Стъпка 2: Свързване на Softpots към ESP32
Първо трябва да свържем нашите софтуерни точки към esp32. Свързваме левия и десния щифт съответно към 5V и GND. Свързваме средния щифт към аналогов щифт на ESP32. Също така трябва да свържем средния щифт със съпротивление 10k ohm и да го свържем към GND. Това е така, че нашият изход от софтуерните точки не връща случайна стойност.
След това свързваме ESP32 с micro usb кабела към нашия компютър, за да можем да качим код към него. Ще използваме Arduino IDE за програмиране на ESP32. Но първо трябва да инсталираме ядрото Arduino за 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;
unsigned long onTime;
без подпис дълъг softPotTime;
След това можем да настроим щифтовете си. И ние трябва да стартираме нашия сериен монитор и нашето време.
void setup () {
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); }
void getdata (байт pdata ) {
// Прочетете стойността на ADC на soft pot
След това трябва да прочетем нашите щифтове, за да можем да получим нашите данни.
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 (софтпот> 10) {
pdata [0] = i;
pdata [1] = софтпот;
pdata [2] = millis ();
} } }
}
Стъпка 3: Свържете безжично ESP32 и RPI
За безжично свързване на ESP32 и RPI ще използваме библиотека, наречена websocket. За да инсталираме тази библиотека, можем да вземем файловете тук. Ще трябва да променим някои код в самите файлове, за да използваме тази библиотека за ESP32.
Ще трябва да сменим MD5.c и MD5.h.
- MD5Init към MD5InitXXX
- MD5Update до MD5UpdateXXX
- MD5Final до MD5FinalXXX
Ще трябва да изтрием и avr/io.h редовете във файловете sha1.
След това можем да добавим библиотеката към нашата 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;
Присвояване на нашия wifi сървър
WiFiServer сървър (80);
Стартиране на нашия сървър websocket
WebSocketServer webSocketServer;
Присвояване на нашия SSID и парола за вашия wifi
const char* ssid = "вашият wifi SSID";
const char* password = "вашата wifi парола";
void setup () {
Настройване на вашия сериен монитор
Serial.begin (115200);
Настройване на вашите софтуерни точки
pinMode (SOFT_POT_PIN1, INPUT);
pinMode (SOFT_POT_PIN2, INPUT);
pinMode (SOFT_POT_PIN3, INPUT);
pinMode (SOFT_POT_PIN4, INPUT);
Стартиране на нашия wifi и свързване с него
WiFi.begin (ssid, парола);
while (WiFi.status ()! = WL_CONNECTED) {
забавяне (1000);
Serial.println ("Свързване към WiFi.."); }
Serial.println ("Свързан към WiFi мрежата");
Serial.println (WiFi.localIP ());
server.begin (); забавяне (100); }
void getdata (char *pdata) {
Четене на вашите данни
// Прочетете стойността на ADC на soft pot
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");
} } }
След това за rPI в python:
Импортиране на нашите библиотеки
импортиране на websocketимпортно време
Присвояване на глобална променлива i
i = 0
Задаване на максимум 200 съобщения, които можем да получим
nrOfMessages = 200
клас Websocket ():
def _init _ (себе си):
Инициализиране на нашия websocket и свързването му към нашия ESP32
self.ws = websocket. WebSocket ()
self.ws.connect ("ws: //172.30.248.48/")
Получаване на нашите данни
def работа (себе си):
self.ws.send ("номер на съобщение: 0")
резултат = self.ws.recv () time.sleep (0.5) връщане на резултат
Затваряне на websocket след получаване на всичко
def close (self):
self.ws.close ()
Стъпка 4: Свързване на вашия уебсайт и база данни
Що се отнася до свързването на нашата база данни и уебсайт, първо ще трябва да създадете вашата база данни на pi, като инсталирате mariadb: sudo apt install mariadb.
След това можете да получите достъп до него, като направите: sudo mariadb.
След това ще трябва да създадете и своя уебсайт. Можете да направите това както искате, но трябва да използвате Flask и трябва да имате формуляр в HTML кода си за спиране и стартиране на вашите данни.
След това можете да вмъкнете този код, за да свържете вашата база данни и вашия уебсайт (и вашият уебсайт, и базата данни трябва да са и на вашето pi, това може да стане, като използвате раздела за разгръщане в настройките на pycharm)
от flaskext.mysql импортирайте MySQL
app.config ["MYSQL_DATABASE_HOST"] = "localhost"
app.config ["MYSQL_DATABASE_DB"] = "име на вашата база данни"
app.config ["MYSQL_DATABASE_USER"] = "потребител на вашата база данни"
app.config ["MYSQL_DATABASE_PASSWORD"] = "паролата на вашата база данни"
Функция за извличане на данни от нашата база данни.
def get_data (sql, params = None):
conn = mysql.connect ()
курсор = conn.cursor ()
print ("получаване на данни")
опитвам:
печат (sql)
cursor.execute (sql, params)
с изключение на изключение като e:
печат (д)
връщане False
резултат = курсор.fetchall ()
данни =
за ред в резултат:
data.append (списък (ред))
cursor.close ()
conn.close ()
връщане на данни
Функция за вмъкване на данни в нашата база данни
def set_data (sql, params = None):
conn = mysql.connect ()
курсор = conn.cursor ()
опитвам:
log.debug (sql)
cursor.execute (sql, params) conn.commit ()
log.debug ("SQL uitgevoerd")
с изключение на изключение като e:
log.exception ("Fout bij uitvoeren van sql: {0})". формат (д))
връщане False
cursor.close ()
conn.close ()
върнете True
Също така ще трябва да включим нашето приложение, за да можете да правите други неща, докато записвате.
клас ThreadedTask (threading. Thread):
def _init _ (себе си,):
Настройване на нишка
threading. Thread._ init _ (себе си)
Създаване на списък за съхраняване на всички ваши получени данни
self.data_all =
def run (самостоятелно):
time.sleep (5)
Импортирайте свой собствен код на python, където получавате данните
импортиране get_websocket
Получавайте вашите данни
w = receive_websocket. Websocket ()
Добавете данните си в списъка си и ги отпечатайте.
за i в обхват (0, 200):
self.data_all.append (w.work (). split (","))
печат (self.data_all)
task = ThreadedTask ()
След това можете да направите task.run (), за да стартирате вашата нишка и да започнете да получавате данни.
Стъпка 5: Свържете всичко заедно
За да стартирате уебсайта си от вашия Pi, трябва да използвате услуга:
[Единица] Описание = uWSGI екземпляр за обслужване на уеб интерфейс на project1
След = 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 = многопотребителска цел
uwsgi-flask.ini, който трябва да поставите в директорията, която сте посочили в ExecStart по-горе
[uwsgi] модул = уеб: app virtualenv =/home/pi/project1/env
master = истински процеси = 5
плъгини = python3
socket = project1.sock chmod-socket = 660 вакуум = вярно
die-on-term = true
Сега можете да прочетете данните си и да ги покажете на уебсайта си.
Стъпка 6: Допълнително: Свързване на LCD екран
Можем да свържем LCD екран, за да можем да покажем ip-адреса на нашия Pi за нашия уебсайт.
импортирайте RPi. GPIO като 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) #Включен + курсор self.stuur_instructie (0x01) @staticmethod def setup (): GPIO.setup (списък, GPIO. OUT) GPIO.setup ([E, RS], GPIO. OUT)
def stuur_instructie (self, byte):
GPIO.изход (E, GPIO. HIGH)
GPIO.изход (RS, GPIO. LOW)
self.set_GPIO_bits (байт)
time.sleep (0.005)
GPIO.изход (E, GPIO. LOW)
def stuur_teken (self, char):
temp = ord (char)
GPIO.изход (E, GPIO. HIGH)
GPIO.изход (RS, GPIO. HIGH)
self.set_GPIO_bits (temp)
time.sleep (0.005)
GPIO.изход (E, GPIO. LOW)
def set_GPIO_bits (self, byte):
за i в обхват (0, 8):
if (байт & (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)
за буква 2 в teken2:
s.stuur_teken (буква2)
if _name_ == '_main_': #Програма, започваща от тук
опитвам:
main ()
с изключение на KeyboardInterrupt:
пропуск
След това можем да създадем услуга за стартиране на LCD при стартиране.
Препоръчано:
Измерване на времето (часовник за измерване на лента): 5 стъпки (със снимки)
Time Measure (Tape Measure Clock): За този проект ние (Alex Fiel & Anna Lynton) взехме ежедневен измервателен инструмент и го превърнахме в часовник! Първоначалният план беше да се моторизира съществуваща рулетка. Като направихме това, решихме, че ще бъде по -лесно да създадем своя собствена черупка, с която да работим
Умен калъф за цигулка: 7 стъпки (със снимки)
Умен калъф за цигулка: Музиката е важна част от живота ми. Свиря на цигулка от 10 години, но има 1 проблем. Никога не знам колко дълго тренирах. В моя проект ще следя температурата, влажността и времето за тренировка. Това е самостоятелен професионалист
4 стъпки за измерване на вътрешното съпротивление на батерията: 4 стъпки
4 стъпки за измерване на вътрешното съпротивление на батерията: Ето 4 -те прости стъпки, които могат да ви помогнат да измерите вътрешното съпротивление на тестото
Измерване на температурата с помощта на платформа Esp32 и Thingsio.ai: 6 стъпки
Измерване на температурата с помощта на Esp32 и платформата Thingsio.ai: В този урок ще обясня за измерването на температурата в околната среда, като използвам вграден температурен сензор, присъстващ в дъската за разработка на esp32. esp32 има много вградени сензори като сензора на Хола, използван като сензор за близост, докоснете
Измерване на съдържанието на влажност на почвата с помощта на платформа Esp32 и Thingsio.ai: 6 стъпки
Измерване на съдържанието на влажност на почвата с помощта на Esp32 и платформата Thingsio.ai: В този урок ще обясня за четене на съдържанието на влага в почвата с помощта на esp32 и след това изпращам стойностите в облачната платформа на IoT thingsio.ai