فهرست مطالب:
- مرحله 1: مواد و ابزارها
- مرحله 2: اتصال Softpots به ESP32
- مرحله 3: اتصال ESP32 و RPI به صورت بی سیم
- مرحله 4: اتصال وب سایت و پایگاه داده
- مرحله 5: همه چیز را به هم متصل کنید
- مرحله 6: اضافی: اتصال صفحه LCD
![اندازه گیری موقعیت های انگشت روی ویولن با ESP32: 6 مرحله اندازه گیری موقعیت های انگشت روی ویولن با ESP32: 6 مرحله](https://i.howwhatproduce.com/images/001/image-31-171-j.webp)
تصویری: اندازه گیری موقعیت های انگشت روی ویولن با ESP32: 6 مرحله
![تصویری: اندازه گیری موقعیت های انگشت روی ویولن با ESP32: 6 مرحله تصویری: اندازه گیری موقعیت های انگشت روی ویولن با ESP32: 6 مرحله](https://i.ytimg.com/vi/qs7u_hniXR8/hqdefault.jpg)
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:57
![اندازه گیری موقعیت های انگشت روی ویولن با 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 Softpot خطی: پتانسیومترهای خطی برای اندازه گیری موقعیت انگشت (ویولن دارای 4 سیم است)
- ESP32: یک ماژول ESP32 برای خواندن داده ها از نرم افزارهای خطی.
- ویولن 4/4: ویولونی برای قرار دادن گلدان های نرم خطی در بالای صفحه.
- Raspberry Pi با کارت SD: تمشک pi که پایگاه داده و وب سایت ما را ذخیره می کند.
- پتانسیومتر 10k: یک پتانسیومتر برای روشنایی LCD
- صفحه LCD: یک صفحه LCD برای نشان دادن به مخاطبین ip rPi
- کیت لحیم کاری: برای لحیم کاری همه عناصر با هم
- سیم های مردانه به مرد و سیم های زن به زن: کابل هایی برای اتصال همه عناصر
- کابل میکرو USB: برای تغذیه ESP32
مرحله 2: اتصال Softpots به ESP32
![اتصال Softpots به ESP32 اتصال Softpots به ESP32](https://i.howwhatproduce.com/images/001/image-31-175-j.webp)
اول از همه ما باید softpot های خود را به esp32 متصل کنیم. ما پین های چپ و راست را به ترتیب به 5V و GND متصل می کنیم. پین وسط را به پین آنالوگ در ESP32 وصل می کنیم. همچنین باید پین وسط را با مقاومت 10k اهم متصل کرده و آن را به GND وصل کنیم. این به این دلیل است که خروجی ما از softpots مقدار تصادفی را بر نمی گرداند.
سپس ESP32 را با کابل micro usb به رایانه خود وصل می کنیم تا بتوانیم کد را روی آن بارگذاری کنیم. برای برنامه نویسی ESP32 از Arduino IDE استفاده خواهیم کرد. اما ابتدا باید هسته 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 ؛
بدون امضای طولانی 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 قابلمه نرم را بخوانید
سپس باید پین های خود را بخوانیم تا بتوانیم داده های خود را دریافت کنیم.
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 Names = {softPotADC1 ، softPotADC2 ، softPotADC3 ، softPotADC4} ؛
int softpot = نام ؛
if (softpot> 10) {
pdata [0] = i ؛
pdata [1] = softpot ؛
pdata [2] = millis ()؛
} } }
}
مرحله 3: اتصال ESP32 و RPI به صورت بی سیم
برای اتصال بی سیم ESP32 و RPI ، از کتابخانه ای به نام websocket استفاده می کنیم. برای نصب این کتابخانه ، می توانیم فایل ها را از اینجا دریافت کنیم. برای استفاده از این کتابخانه برای ESP32 ، باید برخی از کدها را در خود فایلها تغییر دهیم.
ما باید MD5.c و MD5.h را تغییر دهیم.
- MD5Init به MD5InitXXX
- MD5 به روز رسانی به MD5UpdateXXX
- MD5Final به MD5FinalXXX
همچنین باید خطوط avr/io.h را در فایل های sha1 حذف کنیم.
سپس می توانیم کتابخانه را با طرح> شامل کتابخانه> افزودن کتابخانه ZIP به Arduino IDE خود اضافه کنیم و سپس کتابخانه شما را در یک فایل فشرده انتخاب کنیم.
پس از آن می توانیم نوشتن کد خود را شروع کنیم.
ابتدا برای 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) ؛
راه اندازی سرور شبکه وب ما
WebSocketServer webSocketServer؛
اختصاص SSID و رمز عبور وای فای شما
const char* ssid = "SSID فای شما"؛
const char* رمز عبور = "رمز وای فای شما"؛
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.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 قابلمه نرم را بخوانید
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 ()) ؛
}
حلقه خالی () {
اتصال مشتری (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 در پایتون:
وارد کردن کتابخانه های ما
واردات websocketimport زمان
تعیین یک variabel globale i
من = 0
تنظیم حداکثر 200 پیام که می توانیم دریافت کنیم
nrOfMessages = 200
وب سایت کلاس ():
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: اتصال وب سایت و پایگاه داده
در مورد اتصال پایگاه داده و وب سایت ما ، قبل از هر چیز باید پایگاه داده خود را روی 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 = هیچکدام):
conn = mysql.connect ()
مکان نما = conn.cursor ()
چاپ ("دریافت داده")
تلاش كردن:
چاپ (sql)
cursor.execute (sql ، params)
به استثنای e:
چاپ (ه)
بازگشت False
result = cursor.fetchall ()
داده =
برای ردیف در نتیجه:
data.append (لیست (سطر))
cursor.close ()
conn.close ()
بازگشت داده ها
عملکردی برای قرار دادن داده ها در پایگاه داده ما
def set_data (sql ، params = هیچکدام):
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 _ (خود ،):
راه اندازی موضوع
thread. موضوع._ init _ (خود)
ایجاد یک لیست برای نگهداری همه داده های دریافتی شما
self.data_all =
def run (خود):
زمان خواب (5)
کد پایتون خود را در جایی که داده ها را دریافت می کنید وارد کنید
Receive_websocket را وارد کنید
داده های خود را دریافت کنید
w = دریافت_شبکه. وبسایت ()
داده های خود را در لیست خود قرار دهید و چاپ کنید.
برای i در محدوده (0 ، 200):
self.data_all.append (w.work (). split ("،"))
چاپ (self.data_all)
task = ThreadedTask ()
سپس می توانید task.run () را برای شروع موضوع و دریافت داده ها انجام دهید.
مرحله 5: همه چیز را به هم متصل کنید
![اتصال همه چیز به یکدیگر اتصال همه چیز به یکدیگر](https://i.howwhatproduce.com/images/001/image-31-176-j.webp)
برای اجرای وب سایت خود از Pi شما باید از یک سرویس استفاده کنید:
[واحد] توضیحات = نمونه uWSGI برای ارائه رابط وب Project1
After = network.target
BindsTo = mysqld.service
پس از = mysqld.service
[سرویس]
به کاربر خود تغییر دهید
کاربر = pi
گروه = www-data
در اینجا شما باید دایرکتوری فایل 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] module = web: app virtualenv =/home/pi/project1/env
استاد = فرآیندهای واقعی = 5
افزونه = python3
سوکت = project1.sock chmod-socket = 660 خلاء = true
سررسید = درست
اکنون می توانید داده های خود را بخوانید و در وب سایت خود نمایش دهید.
مرحله 6: اضافی: اتصال صفحه LCD
![اضافی: اتصال صفحه LCD اضافی: اتصال صفحه LCD](https://i.howwhatproduce.com/images/001/image-31-177-j.webp)
![اضافی: اتصال صفحه LCD اضافی: اتصال صفحه LCD](https://i.howwhatproduce.com/images/001/image-31-178-j.webp)
![اضافی: اتصال صفحه LCD اضافی: اتصال صفحه LCD](https://i.howwhatproduce.com/images/001/image-31-179-j.webp)
ما می توانیم یک صفحه LCD متصل کنیم تا بتوانیم آدرس IP Pi خود را برای وب سایت خود نشان دهیم.
وارد کردن RPi. GPIO به عنوان زمان GPIOimport
وارد کردن دستورات
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 ()
#Function set self.stuur_instructie (0x3f) #Display self.stuur_instructie (0x0c) #On + cursor self.stuur_instructie (0x01)staticmethod def setup (): GPIO.setup (list، GPIO. OUT) GPIO.setup (، RS] ، GPIO. OUT)
def stuur_instructie (خود ، بایت):
GPIO.output (E ، GPIO. HIGH)
GPIO.output (RS ، GPIO. LOW)
self.set_GPIO_bits (بایت)
زمان خواب (0.005)
GPIO.output (E ، GPIO. LOW)
def stuur_teken (self، char):
temp = ord (char)
GPIO.output (E ، GPIO. HIGH)
GPIO.output (RS ، GPIO. HIGH)
self.set_GPIO_bits (دما)
زمان خواب (0.005)
GPIO.output (E ، GPIO. LOW)
def set_GPIO_bits (خود ، بایت):
برای i در محدوده (0 ، 8):
if (بایت & (2 ** i)) == 0:
GPIO.output (لیست ، GPIO. LOW)
دیگری:
GPIO.output (لیست ، GPIO. HIGH)
def main ():
s = صفحه ()
teken = "آدرس IP محلی:"
برای نامه در teken:
s.stuur_teken (نامه)
teken2 = commands.getoutput ("ip addr show wlan0 | grep -Po 'inet / K [d.]+'")
چاپ (teken2)
s.stuur_instructie (0xc0)
برای letter2 در teken2:
s.stuur_teken (حرف 2)
if _name_ == '_main_': #برنامه از اینجا شروع می شود
تلاش كردن:
اصلی ()
به جز KeyboardIntruptrupt:
عبور
سپس می توانیم یک سرویس برای شروع LCD هنگام راه اندازی ایجاد کنیم.
توصیه شده:
اندازه گیری زمان (ساعت اندازه گیری نوار): 5 مرحله (همراه با تصاویر)
![اندازه گیری زمان (ساعت اندازه گیری نوار): 5 مرحله (همراه با تصاویر) اندازه گیری زمان (ساعت اندازه گیری نوار): 5 مرحله (همراه با تصاویر)](https://i.howwhatproduce.com/images/001/image-186-j.webp)
Time Time (Tape Measure Clock): برای این پروژه ، ما (Alex Fiel & amp؛ Anna Lynton) یک ابزار اندازه گیری روزانه تهیه کردیم و آن را به ساعت تبدیل کردیم! طرح اولیه این بود که یک نوار اندازه گیری موجود را موتور کنید. در ساخت آن ، ما تصمیم گرفتیم که راحت تر بتوانیم پوسته خودمان را ایجاد کنیم
اندازه گیری ولتاژ اندازه جیبی DIY: 5 مرحله
![اندازه گیری ولتاژ اندازه جیبی DIY: 5 مرحله اندازه گیری ولتاژ اندازه جیبی DIY: 5 مرحله](https://i.howwhatproduce.com/images/001/image-882-j.webp)
اندازه گیری ولتاژ DC اندازه جیبی DIY: در این مقاله به شما نشان می دهم که چگونه می توانید ولتاژ DC اندازه جیب DIY را با زنگ پیزو برای بررسی مدار توسط خودتان بسازید. تنها چیزی که نیاز دارید دانش اولیه در زمینه الکترونیک و کمی زمان است. اگر س questionال یا مشکلی دارید می توانید
چگونه می توان مصرف برق ماژول های ارتباطات بی سیم را در دوران مصرف کم مصرف به درستی اندازه گیری کرد؟: 6 مرحله
![چگونه می توان مصرف برق ماژول های ارتباطات بی سیم را در دوران مصرف کم مصرف به درستی اندازه گیری کرد؟: 6 مرحله چگونه می توان مصرف برق ماژول های ارتباطات بی سیم را در دوران مصرف کم مصرف به درستی اندازه گیری کرد؟: 6 مرحله](https://i.howwhatproduce.com/images/003/image-8287-10-j.webp)
چگونه می توان میزان مصرف برق ماژول های ارتباطات بی سیم را در دوران مصرف کم انرژی اندازه گیری کرد ؟: مصرف کم برق یک مفهوم بسیار مهم در اینترنت اشیا است. اکثر گره های اینترنت اشیا نیاز به تغذیه باتری دارند. تنها با اندازه گیری صحیح مصرف برق ماژول بی سیم ، می توان میزان باتری را به طور دقیق تخمین زد
اندازه گیری سیگنال های ریز دفن شده در سر و صدا در اسیلوسکوپ (تشخیص حساس به فاز): 3 مرحله
![اندازه گیری سیگنال های ریز دفن شده در سر و صدا در اسیلوسکوپ (تشخیص حساس به فاز): 3 مرحله اندازه گیری سیگنال های ریز دفن شده در سر و صدا در اسیلوسکوپ (تشخیص حساس به فاز): 3 مرحله](https://i.howwhatproduce.com/images/001/image-2713-71-j.webp)
اندازه گیری سیگنال های ریز دفن شده در سر و صدا در اسیلوسکوپ (تشخیص فاز حساس): تصور کنید می خواهید یک سیگنال کوچک دفن شده در سر و صدا که بسیار قوی تر است را اندازه گیری کنید. نحوه انجام این کار را سریعاً ویدئو را مشاهده کنید یا برای مطالعه جزئیات به خواندن ادامه دهید
اندازه گیری رطوبت خاک با دامنه های صوتی: 6 مرحله (همراه با تصاویر)
![اندازه گیری رطوبت خاک با دامنه های صوتی: 6 مرحله (همراه با تصاویر) اندازه گیری رطوبت خاک با دامنه های صوتی: 6 مرحله (همراه با تصاویر)](https://i.howwhatproduce.com/images/001/image-1069-95-j.webp)
اندازه گیری رطوبت خاک با دامنه های صوتی: در این آموزش نحوه ساخت دستگاهی که رطوبت خاک را با دامنه های صوتی اندازه گیری می کند توضیح خواهیم داد