Isi kandungan:
- Langkah 1: Bahan dan Alat
- Langkah 2: Menyambungkan Softpots ke ESP32
- Langkah 3: Menyambungkan ESP32 dan RPI Tanpa wayar
- Langkah 4: Menghubungkan Laman Web dan Pangkalan Data Anda
- Langkah 5: Menghubungkan Segalanya Bersama
- Langkah 6: Tambahan: Menghubungkan Skrin LCD
Video: Mengukur Posisi Jari pada Biola Dengan Langkah ESP32: 6
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:11
Sebagai pemain biola, saya selalu mahukan aplikasi atau alat yang dapat menunjukkan kedudukan jari saya pada biola dengan sangat tepat. Dengan projek ini saya berusaha membina ini. Walaupun ini adalah prototaip dan anda masih boleh menambahkan banyak ciri.
Saya juga cuba memisahkan ESP32 dan rPI dan dengan itu saya membuat ESP32 menghantar data tanpa wayar ke rPi. Yang mungkin paling sukar untuk projek ini.
Ia juga sangat penting bahawa pada akhir projek ini tidak ada yang tersimpan di komputer anda melainkan pada rPI atau ESP32.
Langkah 1: Bahan dan Alat
Sebelum kita mengetahui secara terperinci pembinaan projek ini, kita memerlukan beberapa perkara.
- 4x Linear Softpot: Linear Potentiometers untuk mengukur kedudukan jari (biola mempunyai 4 tali)
- ESP32: Modul ESP32 untuk membaca data dari softpots linier.
- biola 4/4: biola untuk meletakkan softpots linier di atas.
- Raspberry Pi dengan kad SD: pi raspberry yang akan menyimpan pangkalan data dan laman web kami.
- Potensiometer 10k: potensiometer untuk kecerahan LCD
- Layar LCD: skrin LCD untuk ditunjukkan kepada alamat IP rPi
- Kit Pematerian: Untuk pematerian semua elemen lebih tinggi
- Kabel lelaki-ke-lelaki dan wayar lelaki-ke-wanita: Kabel untuk menghubungkan semua elemen
- Kabel USB mikro: Untuk menghidupkan ESP32
Langkah 2: Menyambungkan Softpots ke ESP32
Pertama sekali, kita perlu menyambungkan softpots kita ke esp32. Kami menghubungkan pin kiri dan kanan masing-masing ke 5V dan GND. Kami menyambungkan pin tengah ke pin analog pada ESP32. Kita juga perlu menyambungkan pin tengah dengan rintangan 10k ohm dan menghubungkannya ke GND. Ini supaya output dari softpots kami tidak mengembalikan nilai rawak.
Kemudian kami menyambungkan ESP32 dengan kabel mikro usb ke komputer kami sehingga kami dapat memuat naik kod kepadanya. Kami akan menggunakan Arduino IDE untuk memprogram ESP32. Tetapi pertama-tama kita perlu memasang teras Arduino untuk ESP32 supaya kita dapat memuat naiknya. Ini boleh dilakukan di sini.
Kemudian kita boleh mula menulis kod.
Mula-mula kita perlu menetapkan pin kita yang mana kita menghubungkan pin tengah softpots kita.
const int SOFT_POT_PIN1 = 34;
const int SOFT_POT_PIN2 = 35;
const int SOFT_POT_PIN3 = 32;
const int SOFT_POT_PIN4 = 33;
onTime panjang yang tidak ditandatangani;
softPotTime panjang yang tidak ditandatangani;
Kemudian kita boleh memasang pin kita. Dan kita perlu memulakan monitor bersiri dan masa kita.
batal persediaan () {
onTime = milis ();
Serial.begin (115200);
Serial.println ("Permulaan program");
pinMode (SOFT_POT_PIN1, INPUT);
pinMode (SOFT_POT_PIN2, INPUT);
pinMode (SOFT_POT_PIN3, INPUT);
pinMode (SOFT_POT_PIN4, INPUT); }
batal getdata (bait pdata ) {
// Baca dalam nilai ADC periuk lembut
Kemudian kita perlu membaca pin kita supaya kita dapat menerima data kita.
int softPotADC1 = analogRead (SOFT_POT_PIN1);
nt softPotADC2 = analogRead (SOFT_POT_PIN2);
int softPotADC3 = analogRead (SOFT_POT_PIN3);
int softPotADC4 = analogRead (SOFT_POT_PIN4);
Kemudian kami meletakkan nilai dalam senarai supaya kami dapat mengeluarkannya dengan mudah kemudian.
untuk (int i = 0; i <4; i ++) {
int Names = {softPotADC1, softPotADC2, softPotADC3, softPotADC4};
int softpot = Nama ;
jika (softpot> 10) {
pdata [0] = i;
pdata [1] = softpot;
pdata [2] = milis ();
} } }
}
Langkah 3: Menyambungkan ESP32 dan RPI Tanpa wayar
Untuk menyambungkan ESP32 dan RPI secara wayarles, kami akan menggunakan perpustakaan yang disebut websocket. Untuk memasang perpustakaan ini, kita boleh mendapatkan failnya di sini. Kita perlu mengubah beberapa kod dalam fail itu sendiri untuk menggunakan perpustakaan ini untuk ESP32.
Kita perlu menukar MD5.c dan MD5.h.
- MD5Init ke MD5InitXXX
- MD5Update ke MD5UpdateXXX
- MD5Final hingga MD5FinalXXX
Kita juga perlu menghapus baris avr / io.h dalam fail sha1.
Kemudian kita boleh menambahkan perpustakaan ke Arduino IDE kami dengan membuat lakaran> memasukkan perpustakaan> menambah. ZIP perpustakaan dan kemudian kami dapat memilih perpustakaan anda dalam fail zip.
Selepas itu kita boleh mula menulis kod kita.
Pertama untuk ESP32:
Termasuk perpustakaan kami
#sertakan #sertakan
Menetapkan pin kami lagi.
const int SOFT_POT_PIN1 = 34;
const int SOFT_POT_PIN2 = 35;
const int SOFT_POT_PIN3 = 32;
const int SOFT_POT_PIN4 = 33;
Menetapkan pelayan wifi kami
Pelayan WiFiServer (80);
Memulakan pelayan websocket kami
WebSocketServer webSocketServer;
Menetapkan SSID dan kata laluan wifi anda
const char * ssid = "SSID wifi anda";
const char * password = "kata laluan wifi anda";
batal persediaan () {
Menyiapkan monitor bersiri anda
Serial.begin (115200);
Menyiapkan softpot anda
pinMode (SOFT_POT_PIN1, INPUT);
pinMode (SOFT_POT_PIN2, INPUT);
pinMode (SOFT_POT_PIN3, INPUT);
pinMode (SOFT_POT_PIN4, INPUT);
Memulakan wifi kami dan menyambungkannya
WiFi.begin (ssid, kata laluan);
sementara (WiFi.status ()! = WL_CONNECTED) {
kelewatan (1000);
Serial.println ("Menyambung ke WiFi.."); }
Serial.println ("Bersambung ke rangkaian WiFi");
Serial.println (WiFi.localIP ());
pelayan.begin (); kelewatan (100); }
batal getdata (char * pdata) {
Membaca data anda
// Baca dalam nilai ADC periuk lembut
int softPotADC1 = analogRead (SOFT_POT_PIN1);
int softPotADC2 = analogRead (SOFT_POT_PIN2);
int softPotADC3 = analogRead (SOFT_POT_PIN3);
int softPotADC4 = analogRead (SOFT_POT_PIN4);
Menempatkan data dalam senarai dan menukarnya menjadi heksadesimal.
sprintf (pdata, "% x,% x,% x,% x,% x", softPotADC1, softPotADC2, softPotADC3, softPotADC4, milis ());
}
gelung kosong () {
Menghubungkan pelanggan anda (rPI)
Pelanggan WiFiClient = server.available ();
jika (klien.sambungan ()) {
kelewatan (10);
jika (webSocketServer.handshake (pelanggan)) {
Serial.println ("Pelanggan disambungkan");
Menghantar dan menerima data.
semasa (client.connected ()) {
data char [30];
getdata (data);
Serial.println (data);
webSocketServer.sendData (data);
kelewatan (10); // Kelewatan diperlukan untuk menerima data dengan betul}
Serial.println ("Pelanggan terputus");
kelewatan (100); }
lain {
Serial.println ("shitsfuckedyo");
} } }
Kemudian untuk rPI di python:
Mengimport perpustakaan kami
mengimport websocketimport masa
Menetapkan pemboleh ubah global i
i = 0
Menetapkan maksimum 200 mesej yang dapat kita terima
nrOfMessages = 200
Websocket kelas ():
def _init _ (diri):
Memulakan soket web kami dan menghubungkannya ke ESP32 kami
self.ws = websocket. WebSocket ()
self.ws.connect ("ws: //172.30.248.48/")
Menerima data kami
kerja def (diri):
self.ws.send ("message nr: 0")
hasil = self.ws.recv () time.sleep (0.5) hasil pulangan
Menutup soket web setelah menerima semuanya
def dekat (diri):
self.ws.close ()
Langkah 4: Menghubungkan Laman Web dan Pangkalan Data Anda
Untuk menghubungkan Pangkalan Data dan laman web kami, pertama sekali anda perlu membuat pangkalan data anda di pi dengan memasang mariadb: sudo apt mari mari.
Kemudian anda boleh mengaksesnya dengan melakukan: sudo mariadb.
Kemudian anda juga perlu membuat laman web anda. Anda boleh melakukan ini sesuka hati, tetapi anda harus menggunakan Flask dan anda perlu mempunyai borang dalam HTML anda untuk menghentikan dan memulakan data anda.
Kemudian anda boleh memasukkan kod ini untuk menyambungkan pangkalan data dan laman web anda (kedua-dua laman web dan pangkalan data anda harus berada di pi anda, ini dapat dilakukan dengan menggunakan tab penyebaran dalam tetapan pycharm)
dari flaskext.mysql import MySQL
app.config ["MYSQL_DATABASE_HOST"] = "localhost"
app.config ["MYSQL_DATABASE_DB"] = "nama pangkalan data anda"
app.config ["MYSQL_DATABASE_USER"] = "pengguna pangkalan data anda"
app.config ["MYSQL_DATABASE_PASSWORD"] = "kata laluan pangkalan data anda"
Fungsi untuk mengeluarkan data dari pangkalan data kami.
def get_data (sql, params = Tiada):
conn = mysql.connect ()
kursor = penyambung kursor ()
cetak ("mendapatkan data")
cuba:
cetak (sql)
kursor.laksanakan (sql, params)
kecuali Pengecualian sebagai e:
mencetak (e)
kembali Palsu
hasil = kursor.fetchall ()
data =
untuk hasil baris:
data.lampirkan (senarai (baris))
kursor.tutup ()
sambung ()
mengembalikan data
Fungsi untuk memasukkan data ke dalam pangkalan data kami
def set_data (sql, params = Tiada):
conn = mysql.connect ()
kursor = conn.cursor ()
cuba:
log.debug (sql)
cursor.execute (sql, params) conn.commit ()
log.debug ("SQL uitgevoerd")
kecuali Pengecualian sebagai e:
log.exception ("Fout bij uitvoeren van sql: {0})". format (e))
kembali Palsu
kursor.tutup ()
sambung ()
kembali Benar
Kami juga perlu memasukkan aplikasi kami supaya anda dapat melakukan perkara lain semasa anda membuat rakaman.
kelas ThreadedTask (threading. Thread):
def _init _ (diri,):
Menyusun utas
threading. Thread._ init _ (diri)
Membuat senarai untuk menyimpan semua data yang anda terima
diri.data_all =
def run (diri):
masa. tidur (5)
Import kod python anda sendiri di mana anda menerima data
import terima_websocket
Terima data anda
w = terima_websocket. Websocket ()
Tambahkan data anda dalam senarai anda dan cetak.
untuk i dalam jarak (0, 200):
self.data_all.append (w.work (). split (","))
cetak (self.data_all)
tugas = ThreadedTask ()
Kemudian anda boleh melakukan task.run () untuk memulakan Thread anda dan mula menerima data.
Langkah 5: Menghubungkan Segalanya Bersama
Untuk menjalankan laman web dari Pi anda, anda harus menggunakan perkhidmatan:
[Unit] Penerangan = Contoh uWSGI untuk melayani antara muka web projek1
Selepas = network.target
BindsTo = mysqld.service
Selepas = mysqld.service
[Perkhidmatan]
Tukar kepada pengguna anda
Pengguna = pi
Kumpulan = data www
Di sini anda perlu memasukkan direktori fail Flask anda
WorkingDirectory = / rumah / pi / projek1 / web
Direktori fail ini anda boleh didapati kemudian.
ExecStart = / usr / bin / uwsgi --ini /home/pi/project1/conf/uwsgi-flask.ini
[Pasang]
WantedBy = multi-user.target
uwsgi-flask.ini yang perlu anda letakkan di direktori yang anda nyatakan di ExecStart di atas
[uwsgi] modul = web: aplikasi virtualenv = / rumah / pi / projek1 / env
master = proses benar = 5
pemalam = python3
soket = projek1. soket chmod-soket = 660 vakum = benar
die-on-term = benar
Kini anda dapat membaca data anda dan memaparkannya di laman web anda.
Langkah 6: Tambahan: Menghubungkan Skrin LCD
Kami boleh menyambungkan skrin LCD sehingga kami dapat menunjukkan alamat ip Pi untuk laman web kami.
import RPi. GPIO sebagai masa GPIOimport
arahan import
GPIO.cleanup ()
D0 = 22
D1 = 5
D2 = 6
D3 = 13
D4 = 19
D5 = 26
D6 = 20
D7 = 21
senarai = [22, 5, 6, 13, 19, 26, 20, 21]
E = 24
RS = 23
Skrin kelas:
def _init _ (diri):
GPIO.setmode (GPIO. BCM)
persediaan diri ()
#Fungsi set self.stuur_instructie (0x3f) #Display self.stuur_instructie (0x0c) #On + kursor self.stuur_instructie (0x01) @staticmethod def setup (): GPIO.setup (list, GPIO. OUT) GPIO.setup ([E, RS], GPIO. OUT)
def stuur_instructie (diri, bait):
GPIO.output (E, GPIO. HIGH)
GPIO.output (RS, GPIO. LOW)
self.set_GPIO_bits (bait)
masa. tidur (0.005)
GPIO.output (E, GPIO. LOW)
def stuur_teken (diri, char):
temp = ord (char)
GPIO.output (E, GPIO. HIGH)
GPIO.output (RS, GPIO. HIGH)
self.set_GPIO_bits (temp)
masa. tidur (0.005)
GPIO.output (E, GPIO. LOW)
def set_GPIO_bits (diri, bait):
untuk i dalam jarak (0, 8):
jika (bait & (2 ** i)) == 0:
GPIO.output (senarai , GPIO. LOW)
lain:
GPIO.output (senarai , GPIO. HIGH)
def utama ():
s = Skrin ()
teken = "Alamat IP tempatan:"
untuk surat dalam teken:
s.stuur_teken (surat)
teken2 = Command.getoutput ("ip addr show wlan0 | grep -Po 'inet / K [d.] +'")
cetak (teken2)
s.stuur_instructie (0xc0)
untuk huruf2 dalam teken2:
s.stuur_teken (huruf2)
jika _name_ == '_main_': #Program bermula dari sini
cuba:
utama ()
kecuali KeyboardInterrupt:
lulus
Kemudian kita boleh membuat perkhidmatan untuk memulakan LCD pada permulaan.
Disyorkan:
Sistem Keselamatan Kunci Jari Jari DIY: 8 Langkah
Sistem Keselamatan Kunci Sidik Jari DIY: Aplikasi ini berguna untuk mengamankan kunci (kunci) dari hari ke hari. Kadang kala kita mempunyai beberapa kunci biasa seperti rumah, garaj, tempat letak kereta di antara dua atau lebih orang. Terdapat sebilangan besar sistem metrik bio yang terdapat di pasar, ini
Sistem Kehadiran Jari Jari dan RFID Menggunakan Pangkalan Data Raspberry Pi dan MySQL: 5 Langkah
Sistem Kehadiran Cap Jari dan RFID Menggunakan Raspberry Pi dan MySQL Pangkalan Data: Video Projek Ini
Sarung Biola Pintar: 7 Langkah (dengan Gambar)
Smart Violin Case: Muzik adalah bahagian penting dalam hidup saya. Saya telah bermain biola selama 10 tahun, tetapi ada 1 masalah. Saya tidak pernah tahu berapa lama saya berlatih. Dalam projek saya, saya akan memerhatikan suhu, kelembapan dan masa latihan. Ini adalah pro yang berdiri sendiri
Mengukur Denyut Jantung Anda Ada di Hujung Jari Anda: Pendekatan Photoplethysmography untuk Menentukan Denyut Jantung: 7 Langkah
Mengukur Denyut Jantung Anda Ada di Hujung Jari Anda: Pendekatan Photoplethysmography untuk Menentukan Denyut Jantung: Fotoplethysmograph (PPG) adalah teknik optik sederhana dan murah yang sering digunakan untuk mengesan perubahan jumlah darah di lapisan tisu mikrovaskular. Ia kebanyakannya digunakan secara tidak invasif untuk membuat pengukuran pada permukaan kulit, biasanya
Kotak Penjagaan Jari Jari: 4 Langkah
Fingerprint Guarded Box: Gunakan pengimbas cap jari UART DFRobot untuk menyimpan cap jari dan hanya membenarkan orang yang dibenarkan mengakses kotak