Агуулгын хүснэгт:

Хийл дээр хурууны байрлалыг ESP32: 6 алхамаар хэмжих
Хийл дээр хурууны байрлалыг ESP32: 6 алхамаар хэмжих

Видео: Хийл дээр хурууны байрлалыг ESP32: 6 алхамаар хэмжих

Видео: Хийл дээр хурууны байрлалыг ESP32: 6 алхамаар хэмжих
Видео: ЗААВАЛ СУРАХ 10 ТОВЧНЫ ХОСЛОЛ | 10 KEYBOARD SHORTCUTS 2024, Оны зургадугаар сарын
Anonim
ESP32 ашиглан хийл дээр хурууны байрлалыг хэмжих
ESP32 ашиглан хийл дээр хурууны байрлалыг хэмжих
ESP32 ашиглан хийл дээр хурууны байрлалыг хэмжих
ESP32 ашиглан хийл дээр хурууны байрлалыг хэмжих

Хийл тоглогчийн хувьд би хийл дээр хурууныхаа байрлалыг маш нарийн харуулдаг програм эсвэл багаж хэрэгслийг үргэлж хүсч байсан. Энэ төслөөр би үүнийг бүтээхийг хичээсэн. Хэдийгээр энэ бол прототип бөгөөд та олон онцлог шинж чанаруудыг нэмж оруулах боломжтой хэвээр байна.

Би ESP32 болон rPI -ийг салгахыг оролдсон тул ESP32 -ийг өгөгдлийг rPi руу утасгүй илгээх боломжийг олгосон. Энэ төслийн хамгийн хэцүү зүйл нь магадгүй юм.

Энэ төслийн төгсгөлд таны компьютер дээр юу ч хадгалагдахгүй байх нь маш чухал бөгөөд энэ нь rPI эсвэл ESP32 дээр байх болно.

Алхам 1: Материал ба багаж хэрэгсэл

Материал ба багаж хэрэгсэл
Материал ба багаж хэрэгсэл

Энэхүү төслийг барих онцлогтой танилцахаас өмнө бидэнд хэдэн зүйл хэрэгтэй байна.

  1. 4х Шугаман зөөлөн сав: Хурууны байрлалыг хэмжих шугаман потенциометр (хийл нь 4 утастай)
  2. ESP32: шугаман зөөлөн цэгүүдээс өгөгдлийг унших ESP32 модуль.
  3. 4/4 хийл: шугаман зөөлөн цэгүүдийг дээр байрлуулах хийл.
  4. SD карттай Raspberry Pi: манай мэдээллийн сан, вэбсайтыг хадгалах бөөрөлзгөнө pi.
  5. 10к потенциометр: LCD дэлгэцийн гэрэлтүүлгийн потенциометр
  6. LCD дэлгэц: rPi-ийн IP хаягийг харуулах LCD дэлгэц
  7. Гагнуурын хэрэгсэл: Бүх элементүүдийг гагнах зориулалттай
  8. Эрэгтэй-эрэгтэй утас, эрэгтэй-эмэгтэй утас: Бүх элементүүдийг холбох кабель
  9. Микро USB кабель: ESP32 -ийг тэжээх зориулалттай

Алхам 2: Зөөлөн цэгүүдийг ESP32 -тэй холбох

Зөөлөн хэсгүүдийг ESP32 -тэй холбох
Зөөлөн хэсгүүдийг 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 дэлгэц холбох
Нэмэлт: LCD дэлгэц холбох
Нэмэлт: LCD дэлгэц холбох
Нэмэлт: LCD дэлгэц холбох
Нэмэлт: LCD дэлгэц холбох
Нэмэлт: 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-ийг асаах үед эхлүүлэх үйлчилгээг бий болгож чадна.

Зөвлөмж болгож буй: