Агуулгын хүснэгт:
- Алхам 1: Материал ба багаж хэрэгсэл
- Алхам 2: Зөөлөн цэгүүдийг ESP32 -тэй холбох
- Алхам 3: ESP32 болон RPI -ийг утасгүй холбох
- Алхам 4: Вэбсайт болон мэдээллийн баазаа холбох
- Алхам 5: Бүх зүйлийг хооронд нь холбох
- Алхам 6: Нэмэлт: LCD дэлгэц холбох
Видео: Хийл дээр хурууны байрлалыг ESP32: 6 алхамаар хэмжих
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:04
Хийл тоглогчийн хувьд би хийл дээр хурууныхаа байрлалыг маш нарийн харуулдаг програм эсвэл багаж хэрэгслийг үргэлж хүсч байсан. Энэ төслөөр би үүнийг бүтээхийг хичээсэн. Хэдийгээр энэ бол прототип бөгөөд та олон онцлог шинж чанаруудыг нэмж оруулах боломжтой хэвээр байна.
Би ESP32 болон rPI -ийг салгахыг оролдсон тул ESP32 -ийг өгөгдлийг rPi руу утасгүй илгээх боломжийг олгосон. Энэ төслийн хамгийн хэцүү зүйл нь магадгүй юм.
Энэ төслийн төгсгөлд таны компьютер дээр юу ч хадгалагдахгүй байх нь маш чухал бөгөөд энэ нь rPI эсвэл ESP32 дээр байх болно.
Алхам 1: Материал ба багаж хэрэгсэл
Энэхүү төслийг барих онцлогтой танилцахаас өмнө бидэнд хэдэн зүйл хэрэгтэй байна.
- 4х Шугаман зөөлөн сав: Хурууны байрлалыг хэмжих шугаман потенциометр (хийл нь 4 утастай)
- ESP32: шугаман зөөлөн цэгүүдээс өгөгдлийг унших ESP32 модуль.
- 4/4 хийл: шугаман зөөлөн цэгүүдийг дээр байрлуулах хийл.
- SD карттай Raspberry Pi: манай мэдээллийн сан, вэбсайтыг хадгалах бөөрөлзгөнө pi.
- 10к потенциометр: LCD дэлгэцийн гэрэлтүүлгийн потенциометр
- LCD дэлгэц: rPi-ийн IP хаягийг харуулах LCD дэлгэц
- Гагнуурын хэрэгсэл: Бүх элементүүдийг гагнах зориулалттай
- Эрэгтэй-эрэгтэй утас, эрэгтэй-эмэгтэй утас: Бүх элементүүдийг холбох кабель
- Микро USB кабель: ESP32 -ийг тэжээх зориулалттай
Алхам 2: Зөөлөн цэгүүдийг ESP32 -тэй холбох
Юуны өмнө бид зөөврийн компьютеруудаа esp32 -тэй холбох хэрэгтэй. Бид зүүн ба баруун тээглүүрүүдийг 5V ба GND -т тус тус холбодог. Бид дунд зүүг ESP32 дээрх аналог зүүтэй холбодог. Бид мөн дунд зүүг 10к ом эсэргүүцэлтэй холбож GND -тэй холбох хэрэгтэй. Энэ нь бидний зөөлөн цэгүүдийн гаралт нь санамсаргүй утгыг буцааж өгөхгүй байх явдал юм.
Дараа нь бид ESP32 -ийг микро USB кабелиар компьютерт холбож код оруулах боломжтой болно. Бид Arduino IDE -ийг ESP32 програмчлахад ашиглах болно. Гэхдээ эхлээд бид 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 ();
Цуваа.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 byte ) {
// Зөөлөн тогооны 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);
Дараа нь бид утгыг жагсаалтад оруулснаар дараа нь хялбархан гаргах боломжтой болно.
for (int i = 0; i <4; i ++) {
int Нэр = {softPotADC1, softPotADC2, softPotADC3, softPotADC4};
int softpot = Нэр ;
if (softpot> 10) {
pdata [0] = i;
pdata [1] = зөөлөн тогоо;
pdata [2] = миллис ();
} } }
}
Алхам 3: ESP32 болон RPI -ийг утасгүй холбох
ESP32 ба RPI -ийг утасгүй холбохын тулд бид вэбсокет хэмээх номын санг ашиглах болно. Энэ номын санг суулгахын тулд бид файлуудыг эндээс авах боломжтой. Энэхүү номын санг ESP32 -д ашиглахын тулд бид файлуудын зарим кодыг өөрчлөх шаардлагатай болно.
Бид MD5.c болон MD5.h -ийг өөрчлөх шаардлагатай болно.
- MD5Init -аас MD5InitXXX хүртэл
- MD5 MD5UpdateXXX болгон шинэчлэх
- MD5Final to MD5FinalXXX
Бид мөн sha1 файлууд дахь avr/io.h мөрүүдийг устгах хэрэгтэй болно.
Дараа нь бид номын сангаа ноорог хэлбэрээр 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 вэбSocketServer;
Манай SSID болон wifi -ийн нууц үгийг зааж өгч байна
const char* ssid = "таны wifi SSID";
const char* password = "таны wifi нууц үг";
хүчингүй тохиргоо () {
Цуваа дэлгэцийг тохируулж байна
Цуваа.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 ());
}
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/")
Бидний өгөгдлийг хүлээн авч байна
def ажил (өөрөө):
self.ws.send ("мессеж nr: 0")
result = self.ws.recv () time.sleep (0.5) буцах үр дүн
Бүгдийг хүлээн авсны дараа вэбсайтын хаалтыг хаах
def close (өөрөө):
self.ws.close ()
Алхам 4: Вэбсайт болон мэдээллийн баазаа холбох
Манай мэдээллийн сан болон вэбсайтыг холбох тухайд юуны өмнө mariadb: sudo apt install mariadb суулгаснаар pi дээр өгөгдлийн сангаа бүрдүүлэх шаардлагатай болно.
Дараа нь та sudo mariadb ашиглан үүнийг хийх боломжтой.
Дараа нь та бас вэбсайт үүсгэх хэрэгтэй болно. Та үүнийг хүссэнээрээ хийж болно, гэхдээ та колбыг ашиглах ёстой бөгөөд өгөгдлөө зогсоох, эхлүүлэхийн тулд 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 ()
курсор = холболтын курсор ()
хэвлэх ("мэдээлэл авах")
оролдоно уу:
хэвлэх (sql)
cursor.execute (sql, params)
e -ээс бусад онцгой тохиолдлыг эс тооцвол:
хэвлэх (e)
худал хуурмагийг буцаана
үр дүн = cursor.fetchall ()
өгөгдөл =
үр дүнгийн хувьд:
data.append (жагсаалт (мөр))
cursor.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 ("Fout bij uitvoeren van sql: {0})" формат (e))
худал хуурмагийг буцаана
cursor.close ()
холболтыг хаах ()
Үнэн буцах
Мөн бид бичлэг хийж байхдаа өөр зүйл хийх боломжтой байхын тулд манай аппликейшныг оруулах шаардлагатай болно.
class ThreadedTask (threading. Thread):
def _init _ (өөрөө,):
Утас тохируулах
thread. Thread._ init _ (өөрөө)
Хүлээн авсан бүх өгөгдлийг хадгалах жагсаалтыг гаргах
self.data_all =
def run (өөрөө):
цаг унтах (5)
Өгөгдлийг хүлээн авдаг өөрийн питон кодыг импортлоорой
receive_websocket импортлох
Өгөгдлөө хүлээн авна уу
w = хүлээн авах_websocket. Websocket ()
Өгөгдлөө жагсаалтад оруулаад хэвлэ.
i -ийн хувьд (0, 200):
self.data_all.append (w.work (). хуваах (","))
хэвлэх (self.data_all)
task = ThreadedTask ()
Дараа нь та thread. -ийг эхлүүлэхийн тулд task.run () хийж өгөгдөл хүлээн авч болно.
Алхам 5: Бүх зүйлийг хооронд нь холбох
Pi -ээс вэбсайтаа ажиллуулахын тулд та дараах үйлчилгээг ашиглах ёстой.
[Нэгж] Тодорхойлолт = project1 вэб интерфэйсэд үйлчлэх uWSGI жишээ
Үүний дараа = сүлжээний зорилго
BindsTo = mysqld.service
Дараа = mysqld.service
[Үйлчилгээ]
Хэрэглэгч болгон өөрчлөх
Хэрэглэгч = pi
Бүлэг = www-дата
Энд та колбоны файлынхаа лавлахыг оруулах ёстой
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-сокет = 660 вакуум = үнэн
нас барсан = үнэн
Одоо та өөрийн өгөгдлийг уншиж, вэбсайт дээрээ харуулах боломжтой.
Алхам 6: Нэмэлт: LCD дэлгэц холбох
Бид LCD дэлгэцийг холбож болох бөгөөд ингэснээр манай вэбсайтын 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 ()
#Функцийг өөрөө тохируулах.stuur_instructie (0x3f) #Дэлгэцийг өөрөө харуулах, 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_': #Хөтөлбөр эндээс эхэлнэ
оролдоно уу:
үндсэн ()
Keyboard тасалдалаас бусад:
дамжуулах
Дараа нь бид LCD-ийг асаах үед эхлүүлэх үйлчилгээг бий болгож чадна.
Зөвлөмж болгож буй:
Тоглоомын дизайныг 5 алхамаар 5 алхамаар хийнэ
Тоглоомын дизайныг 5 алхамаар хий: Flick бол тоглоом хийх, ялангуяа таавар, харааны роман эсвэл адал явдалт тоглоом хийх үнэхээр энгийн арга юм
Raspberry Pi 4: 4 алхамаар хөрсний чийгшилийг хэмжих
Raspberry Pi 4 ашиглан хөрсний чийгшилийг хэмжих: Та ургамлыг хэр олон удаа усалдаг болохыг мэдэх үү? Эсвэл ургамлыг цутгаад алдсан. Үүнийг шийдэхийн тулд ургамлыг зохих ёсоор услах шийдвэр гаргахын тулд хөрсөн дэх усны агууламжийн үнэ цэнийг олж авах нь илүү чухал гэж би бодлоо
Ухаалаг хийл хөгжим: 7 алхам (зурагтай)
Ухаалаг хийл хөгжим: Хөгжим бол миний амьдралын чухал хэсэг юм. Би хийл тоглоод 10 жил болж байгаа ч 1 асуудал байна. Би хэр удаан дасгал хийснээ мэдэхгүй байна. Миний төсөлд би температур, чийгшил, дадлага хийх цагийг хянах болно. Энэ бол бие даасан мэргэжилтэн юм
Эрхий хурууны цохилт: Гэрэлт эрхий хурууны ялалт (V.O.L.T.): 6 алхам
Гайхамшигтай эрхий бөхийн барилдаан: Гэрлийн эрхий хурууны ялалт (V.O.L.T.): Тэмдэглэлийг хамгийн сайн уншаарай! Daarnaast telt het apparaat zelf af tot 3, zodat je nooit meer vals kan spelen
Зүрхний цохилтыг хэмжих нь хурууны үзүүрт байдаг: Зүрхний цохилтыг тодорхойлох фотоплетизмын арга: 7 алхам
Зүрхний цохилтыг хэмжих нь хурууны үзүүрт байдаг: Зүрхний цохилтыг тодорхойлох фотоплетизмын арга: Photoplethysmograph (PPG) нь энгийн бөгөөд хямд өртөгтэй оптик техник бөгөөд үүнийг бичил судасны эд дэх цусны эзлэхүүний өөрчлөлтийг илрүүлэхэд ихэвчлэн ашигладаг. Энэ нь ихэвчлэн арьсны гадаргуу дээр хэмжилт хийхэд инвазив бус байдлаар ашиглагддаг, ихэвчлэн