תוכן עניינים:
- שלב 1: חומרים וכלים
- שלב 2: חיבור ה- Softpots ל- ESP32
- שלב 3: חיבור ה- ESP32 וה- RPI באופן אלחוטי
- שלב 4: חיבור האתר והמסד שלך
- שלב 5: חיבור הכל ביחד
- שלב 6: תוספת: חיבור מסך LCD
וִידֵאוֹ: מדידת תנוחות אצבע על כינור עם ESP32: 6 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:16
כנגן כינור תמיד רציתי אפליקציה או כלי שיכול להראות לי את מיקום האצבעות שלי על הכינור בצורה מדויקת מאוד. עם הפרויקט הזה ניסיתי לבנות את זה. למרות שזהו אב טיפוס ועדיין תוכל להוסיף תכונות רבות.
ניסיתי גם להפריד בין ה- ESP32 לבין ה- rPI וכך גרמתי ל- ESP32 לשלוח נתונים אלחוטיים ל- rPi. וזה כנראה הדבר הכי קשה בפרויקט הזה.
כמו כן, חשוב מאוד שבסוף הפרויקט הזה שום דבר לא יאוחסן במחשב שלך, אלא שהוא נמצא ב- rPI או ב- ESP32.
שלב 1: חומרים וכלים
לפני שנכנס לפרטים של בניית הפרויקט הזה אנחנו צריכים כמה דברים.
- 4x סיר לינארי: פוטנציומטרים ליניאריים למדידת מיקום האצבע (לכינור יש 4 מיתרים)
- ESP32: מודול ESP32 לקריאת הנתונים מנקודות הרך הלינאריות.
- כינור 4/4: כינור למקם את הסיכות הרכות הלינאריות למעלה.
- פטל פטל עם כרטיס SD: פטל פאי שיאחסן את מסד הנתונים והאתר שלנו.
- פוטנציומטר 10k: פוטנציומטר לבהירות ה- LCD
- מסך LCD: מסך LCD להצגה לתוספי ה- ip של ה- rPi
- ערכת הלחמה: להלחמה של כל האלמנטים יחד
- חוטי זכר לזכר וחוטי זכר לנקבה: כבלים לחיבור כל האלמנטים
- כבל מיקרו USB: להפעלת ה- ESP32
שלב 2: חיבור ה- Softpots ל- ESP32
קודם כל עלינו לחבר את סירים הרכים שלנו ל- esp32. אנו מחברים את הסיכות השמאלית והימנית ל- 5V ו- GND בהתאמה. אנו מחברים את הסיכה האמצעית לסיכה אנלוגית ב- ESP32. עלינו גם לחבר את הסיכה האמצעית בהתנגדות של 10k אוהם ולחבר זאת ל- GND. זאת על מנת שהפלט שלנו מהסירים הרכים לא יחזיר ערך אקראי.
לאחר מכן אנו מחברים את ה- ESP32 עם כבל המיקרו 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;
onTime לא חתום;
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 void (בייט 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 = שמות ;
אם (softpot> 10) {
pdata [0] = i;
pdata [1] = softpot;
pdata [2] = מיליס ();
} } }
}
שלב 3: חיבור ה- ESP32 וה- RPI באופן אלחוטי
לחיבור ESP32 ו- RPI באופן אלחוטי, נשתמש בספרייה הנקראת websocket. כדי להתקין את הספרייה הזו, אנו יכולים להשיג את הקבצים כאן. נצטרך לשנות קוד כלשהו בקבצים עצמם על מנת להשתמש בספרייה זו עבור ESP32.
נצטרך לשנות את MD5.c ו- MD5.h.
- MD5Init ל- MD5InitXXX
- MD5Update to MD5UpdateXXX
- MD5Final עד MD5FinalXXX
נצטרך גם למחוק את שורות avr/io.h בקבצי sha1.
לאחר מכן נוכל להוסיף את הספרייה ל- IDE Arduino שלנו על ידי סקיצה> כלול ספרייה> להוסיף ספריית. 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 = "SSID ה- wifi שלך";
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);
מתחילים את ה- wifi שלנו ומתחברים אליו
WiFi.begin (ssid, סיסמא);
בעוד (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 ());
}
לולאת חלל () {
חיבור הלקוח שלך (ה- rPI)
לקוח WiFiClient = server.available ();
if (client.connected ()) {
עיכוב (10);
if (webSocketServer.handshake (לקוח)) {
Serial.println ("לקוח מחובר");
שליחה וקבלה של נתונים.
while (client.connected ()) {
נתוני צ'ארה [30];
getdata (נתונים);
Serial.println (נתונים);
webSocketServer.sendData (נתונים);
עיכוב (10); // עיכוב הדרוש לקבלת הנתונים בצורה נכונה}
Serial.println ("הלקוח נותק");
עיכוב (100); }
אחר {
Serial.println ("shitsfuckedyo");
} } }
ואז עבור ה- rPI בפייתון:
ייבוא הספריות שלנו
זמן יבוא websocket
הקצאת משתנה גלובלי i
i = 0
קביעת 200 הודעות לכל היותר שנוכל לקבל
nrOfMessages = 200
class Websocket ():
def _init _ (עצמי):
אתחול שקע האינטרנט שלנו וחיבורו ל- ESP32 שלנו
self.ws = websocket. WebSocket ()
self.ws.connect ("ws: //172.30.248.48/")
קבלת הנתונים שלנו
עבודה def (עצמי):
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.
אז תצטרך גם ליצור את האתר שלך. אתה יכול לעשות את זה כרצונך, אך עליך להשתמש בבקבוק ועליך שיהיה לך טופס ב- 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 = None):
conn = mysql.connect ()
סמן = conn.cursor ()
print ("קבלת נתונים")
לְנַסוֹת:
הדפסה (sql)
cursor.execute (sql, params)
למעט חריגה כמו e:
הדפס (ה)
להחזיר שקר
result = cursor.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 המבצע")
למעט חריגה כמו e:
log.exception ("מידע על ביצוע SQL: {0})". פורמט (ה))
להחזיר שקר
cursor.close ()
conn.close ()
להחזיר נכון
נצטרך גם להשחיל את היישום שלנו כך שתוכל לעשות דברים אחרים בזמן שאתה מקליט.
class ThreadedTask (threading. Thread):
def _init _ (עצמי,):
הגדרת חוט
threading. Thread._ init _ (עצמי)
יצירת רשימה לאחסון כל הנתונים שהתקבלו
self.data_all =
ריצה Def (עצמי):
time.sleep (5)
ייבא קוד פיתון משלך היכן שאתה מקבל את הנתונים
יבוא קבלת_אתר אינטרנט
קבל את הנתונים שלך
w = Receive_websocket. Websocket ()
הוסף את הנתונים שלך ברשימה והדפס אותם.
עבור i בטווח (0, 200):
self.data_all.append (w.work (). פיצול (","))
הדפס (self.data_all)
task = ThreadedTask ()
לאחר מכן תוכל לבצע task.run () כדי להפעיל את האשכול שלך ולהתחיל לקבל נתונים.
שלב 5: חיבור הכל ביחד
כדי להפעיל את האתר שלך מה- Pi שלך עליך להשתמש בשירות:
[Unit] Description = מופע uWSGI לשרת ממשק אינטרנט project1
אחרי = network.target
BindsTo = mysqld.service
אחרי = mysqld.service
[שֵׁרוּת]
שנה למשתמש שלך
משתמש = pi
קבוצה = www-data
כאן עליך להזין את ספריית קובץ הבקבוק שלך
מדריך עבודה =/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
socket = project1.sock chmod-socket = 660 ואקום = נכון
למות בטווח = נכון
כעת תוכל לקרוא את הנתונים שלך ולהציג אותם באתר שלך.
שלב 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) #On + סמן self.stuur_instructie (0x01) @staticmethod הגדרת הגדרות (): 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 (בתים)
time.sleep (0.005)
פלט GPIO. E (E, GPIO. LOW)
def stuur_teken (self, char):
temp = ord (char)
פלט GPIO. (E, GPIO. HIGH)
פלט GPIO (RS, GPIO. HIGH)
self.set_GPIO_bits (זמני)
time.sleep (0.005)
פלט GPIO. (E, GPIO. LOW)
def set_GPIO_bits (עצמי, בתים):
עבור i בטווח (0, 8):
אם (בתים & (2 ** i)) == 0:
פלט GPIO.out (רשימה , GPIO. LOW)
אַחֵר:
פלט GPIO.out (רשימה , 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 בציור 2:
s.stuur_teken (אות 2)
אם _name_ == '_ עיקר_': #תוכנית החל מכאן
לְנַסוֹת:
רָאשִׁי()
למעט מקלדת הפרעה:
לַעֲבוֹר
לאחר מכן נוכל ליצור שירות להפעלת ה- LCD בעת ההפעלה.
מוּמלָץ:
חיישן טביעות אצבע קיבולי ממשק עם Arduino UNO: 7 שלבים
חיישן טביעות אצבע קיבולי ממשק עם Arduino UNO: היי, מה קורה, חבר'ה! אקרש כאן מ- CETech. היום אנו הולכים להוסיף שכבת הגנה לפרויקטים שלנו. אל תדאג, אנחנו לא הולכים למנות שומרי ראש עבור אותו דבר. זה יהיה חיישן טביעות אצבע חמוד ונאה של DFRobot. אז
מדידת זמן (שעון מדידת סרט): 5 שלבים (עם תמונות)
מדידת זמן (שעון מדידת סרט): לפרויקט זה לקחנו (אלכס פיל ואנה לינטון) כלי מדידה יומיומי והפכנו אותו לשעון! התוכנית המקורית הייתה להניע סרט מדידה קיים. בכך, החלטנו שיהיה קל יותר ליצור מעטפת משלנו לשימוש
מכונת הצבעה ביומטרית המבוססת על טביעות אצבע באמצעות Arduino: 4 שלבים (עם תמונות)
מכונת הצבעה ביומטרית המבוססת על טביעות אצבע באמצעות Arduino: כולנו מודעים למכונת ההצבעה האלקטרונית הקיימת שבה המשתמש צריך ללחוץ על כפתור כדי להביע את ההצבעה. אבל המכונות האלה זכו לביקורת על הרפיה מאז תחילת הדרך. אז הממשלה מתכננת להציג טביעת אצבע
זיהוי טביעת אצבע: 4 שלבים
זיהוי טביעות אצבע: אנו יכולים לראות את יישום טביעת האצבע בחיי היומיום שלנו. עם התפתחות תעשיית הטלפונים הניידים, כמעט לטלפון הנייד של כולם יש פונקציית נעילת טביעות אצבע. היום, אציג מכשיר לפתיחת טביעות אצבע שיכול לשמש את
מארז כינור חכם: 7 שלבים (עם תמונות)
מארז כינור חכם: מוזיקה היא חלק חשוב בחיי. אני מנגן בכינור כבר 10 שנים, אבל יש בעיה אחת. אני אף פעם לא יודע כמה זמן התאמנתי. בפרויקט שלי אעקוב אחר הטמפרטורה, הלחות וזמן התרגול. זה מקצוען עצמאי