Мазмуну:
- 1 -кадам: материалдар жана инструменттер
- 2 -кадам: Softpotsту ESP32ге туташтыруу
- 3 -кадам: ESP32 менен RPIди зымсыз туташтыруу
- 4 -кадам: Веб -сайтыңызды жана маалымат базаңызды туташтыруу
- 5 -кадам: Бардыгын бириктирүү
- 6 -кадам: Кошумча: ЖК экранды туташтыруу
Video: ESP32 менен скрипкадагы манжалардын абалын өлчөө: 6 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:42
Скрипкачы катары мен ар дайым скрипкадагы манжаларымдын абалын көрсөтө турган колдонмону же куралды эңсечүмүн. Бул долбоор менен мен муну курууга аракет кылдым. Бул прототип болсо да, сиз дагы көптөгөн функцияларды кошо аласыз.
Мен ошондой эле ESP32 менен rPIди ажыратууга аракет кылдым, ошондуктан ESP32ди rPiге зымсыз маалыматтарды жөнөтүүгө мажбур кылдым. Бул, балким, бул проекттеги эң кыйын нерсе.
Бул долбоордун аягында сиздин компьютерде эч нерсе сакталбаганы абдан маанилүү, бирок ал rPI же ESP32де.
1 -кадам: материалдар жана инструменттер
Бул долбоорду куруунун өзгөчөлүктөрүнө кирүүдөн мурун, биз бир нече нерсеге муктажбыз.
- 4x сызыктуу Softpot: манжанын абалын өлчөө үчүн сызыктуу потенциометрлер (скрипкада 4 кыл бар)
- ESP32: ESP32 модулу сызыктуу softpotsтон маалыматтарды окуу үчүн.
- 4/4 скрипка: сызыктуу соптотторду үстүнө коюу үчүн скрипка.
- SD картасы бар Raspberry Pi: биздин базаны жана веб -сайтыбызды сактай турган малина пи.
- 10k потенциометр: ЖКнын жарыктыгы үчүн потенциометр
- ЖК-экран: rPiдин IP адрестерине көрсөтүү үчүн LCD экран
- Soldering Kit: Бардык элементтерди бириктирүү үчүн
- Эркек-эркек зымдары жана эркек-ургаачы зымдар: Бардык элементтерди туташтыруу үчүн кабелдер
- Микро USB кабели: ESP32ди иштетүү үчүн
2 -кадам: Softpotsту ESP32ге туташтыруу
Биринчиден, биз SoftPOTторубузду esp32ге туташтырышыбыз керек. Биз сол жана оң казыктарды тиешелүү түрдө 5V жана GNDге туташтырабыз. Биз орто пинди ESP32деги аналогдук пинге туташтырабыз. Биз ошондой эле 10к Ом каршылыгы бар орто пинди туташтырып, муну GNDге туташтырышыбыз керек. Бул биздин softpots чыгарылышыбыз туш келди маанини кайтарбашы үчүн.
Андан кийин биз ESP32ди микро USB кабели менен компьютерибизге туташтырабыз, ошондо биз кодду жүктөй алабыз. Биз ESP32ди программалоо үчүн Arduino IDE колдонобуз. Бирок адегенде биз 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 ();
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); }
жараксыз маалымат (байт 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 Аттар = {softPotADC1, softPotADC2, softPotADC3, softPotADC4};
int softpot = Аттар ;
эгер (softpot> 10) {
pdata [0] = i;
pdata [1] = softpot;
pdata [2] = миллис ();
} } }
}
3 -кадам: ESP32 менен RPIди зымсыз туташтыруу
ESP32 жана RPIди зымсыз туташтыруу үчүн, вебсокет деп аталган китепкананы колдонобуз. Бул китепкананы орнотуу үчүн, биз бул жерден файлдарды ала алабыз. Бул китепкананы ESP32 үчүн колдонуу үчүн файлдардын өзүндөгү кээ бир кодду өзгөртүүбүз керек болот.
Биз MD5.c жана MD5.h өзгөртүшүбүз керек болот.
- MD5Init to MD5InitXXX
- MD5UpdateXXXке MD5Update
- MD5Final үчүн MD5FinalXXX
Биз ошондой эле sha1 файлдарындагы avr/io.h линияларын жок кылышыбыз керек.
Андан кийин биз китепкананы биздин Arduino IDEге эскиз менен кошо алабыз> китепкананы кошуу>. 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);
Веб -сайтыбыздын серверин иштетүү
WebSocketServer webSocketServer;
Сиздин SSID менен Wi -Fi сырсөзүңүздү дайындоо
const char* ssid = "сиздин WiFi SSID";
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);
Wi -Fi иштетип, ага туташып жатабыз
WiFi.begin (ssid, сырсөз);
while (WiFi.status ()! = WL_CONNECTED) {
кечигүү (1000);
Serial.println ("WiFi'ге туташууда.."); }
Serial.println ("WiFi тармагына туташкан");
Serial.println (WiFi.localIP ());
server.begin (); кечиктирүү (100); }
жараксыз маалымат (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);
эгер (webSocketServer.handshake (кардар)) {
Serial.println ("Кардар туташты");
Маалыматтарды жөнөтүү жана алуу.
while (client.connected ()) {
char маалыматтары [30];
getdata (маалыматтар);
Serial.println (маалыматтар);
webSocketServer.sendData (маалыматтар);
кечигүү (10); // Маалыматты туура кабыл алуу үчүн кечигүү керек}
Serial.println ("Кардар ажыратылды");
кечиктирүү (100); }
башка {
Serial.println ("shitsfuckedyo");
} } }
Андан кийин pythonдогу rPI үчүн:
Биздин китепканаларды импорттоо
веб -сайтты импорттоо убактысы
Глобалдык өзгөргүчтү дайындоо i
i = 0
Биз ала турган 200 билдирүүнүн максимумун коюу
nrOfMessages = 200
класс Websocket ():
def _init _ (өзүн):
Веб -сайтыбызды баштоо жана аны ESP32ге туташтыруу
self.ws = websocket. WebSocket ()
self.ws.connect ("ws: //172.30.248.48/")
Биздин маалыматтарды алуу
def work (өз алдынча):
self.ws.send ("билдирүү nr: 0")
result = self.ws.recv () time.sleep (0.5) return result
Баарын алгандан кийин вебсокеттин жабылышы
def close (өзүн):
self.ws.close ()
4 -кадам: Веб -сайтыңызды жана маалымат базаңызды туташтыруу
Биздин маалымат базабыз менен веб -сайтыбызды туташтыра турган болсок, биринчи кезекте mariadb: sudo apt install mariadb орнотуу менен пи боюнча маалымат базаңызды түзүшүңүз керек болот.
Андан кийин сиз ага кире аласыз: sudo mariadb.
Андан кийин сиз дагы веб -сайтыңызды түзүшүңүз керек болот. Сиз муну каалаганыңыздай кыла аласыз, бирок сиз Flaskти колдонушуңуз керек жана HTMLиңизде маалыматтарды токтотуу жана баштоо үчүн форма болушу керек.
Андан кийин, бул кодду маалымат базаңыз менен веб -сайтыңызды туташтыруу үчүн кыстарсаңыз болот (веб -сайтыңыз да, маалымат базасы да сиздин пиңизде болушу керек, муну 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 ()
басып чыгаруу ("маалыматтарды алуу")
аракет кыл:
басып чыгаруу (sql)
cursor.execute (sql, params)
e сыяктуу өзгөчө учурларды кошпогондо:
басып чыгаруу (e)
жалган кайтаруу
натыйжа = 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 uitgevoerd")
e сыяктуу өзгөчө учурларды кошпогондо:
log.exception ("Sql: {0})" форматы (e))
жалган кайтаруу
cursor.close ()
Conn.close ()
кайра True
Биз ошондой эле жазуу учурунда башка нерселерди жасай алышыбыз үчүн биздин колдонмону жипке салуубуз керек болот.
класс ThreadedTask (threading. Thread):
def _init _ (өзүн,):
Жипти жөндөө
Thread. Thread._ init _ (өзүнчө)
Алынган маалыматтардын бардыгын сактоо үчүн тизме түзүү
self.data_all =
def run (өзүнчө):
убакыт.уйку (5)
Маалыматты алган өзүңүздүн питон кодуңузду импорттоңуз
receive_websocket импорттоо
Маалыматыңызды алыңыз
w = receive_websocket. Websocket ()
Тизмеңизге маалыматтарды кошуп, басып чыгарыңыз.
i үчүн диапазондо (0, 200):
self.data_all.append (w.work (). split (","))
басып чыгаруу (self.data_all)
тапшырма = ThreadedTask ()
Андан кийин, Thread'ти баштоо жана маалыматтарды кабыл алуу үчүн task.run () жасай аласыз.
5 -кадам: Бардыгын бириктирүү
Пиңизден веб -сайтыңызды иштетүү үчүн сиз кызматты колдонушуңуз керек:
[Unit] Description = uWSGI мисалы, project1 веб интерфейсин тейлейт
Кийин = network.target
BindsTo = mysqld.service
Кийин = mysqld.service
[Кызмат]
Колдонуучуну өзгөртүү
Колдонуучу = pi
Топ = www-маалыматтар
Бул жерде сиз 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] модуль = веб: колдонмо virtualenv =/home/pi/project1/env
мастер = чыныгы процесстер = 5
плагиндер = python3
розетка = проект1. байпак chmod-розетка = 660 боштук = чын
мөөнөттүү = чындык
Эми сиз маалыматыңызды окуп, веб -сайтыңызда көрсөтө аласыз.
6 -кадам: Кошумча: ЖК экранды туташтыруу
Биз ЖК экранды туташтыра алабыз, ошондо биздин веб-сайтыбыздын Pi дарегин көрсөтө алабыз.
GPO импорттоо убактысы катары RPi. 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 ()
#Функция set.stuur_instructie (0x3f) #Display self.stuur_instructie (0x0c) #On + курсору self.stuur_instructie (0x01) @staticmethod def setup (): GPIO.setup (тизме, GPIO. OUT) GPIO.setup ([E, RS], GPIO. OUT)
def stuur_instructie (өзүнчө, байт):
GPIO.output (E, GPIO. HIGH)
GPIO.output (RS, GPIO. LOW)
self.set_GPIO_bits (байт)
time.sleep (0.005)
GPIO.output (E, GPIO. LOW)
def stuur_teken (өзүн, чар):
темп = орд (char)
GPIO.output (E, GPIO. HIGH)
GPIO.output (RS, GPIO. HIGH)
self.set_GPIO_bits (темп)
time.sleep (0.005)
GPIO.output (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_': #Программа ушул жерден башталат
аракет кыл:
негизги ()
KeyboardInterruptдон башка:
өтүү
Андан кийин биз ЖКны баштоо боюнча кызматты түзө алабыз.
Сунушталууда:
Убакытты өлчөө (Тасманын өлчөө сааты): 5 кадам (Сүрөттөр менен)
Убакытты өлчөө (Тасманын өлчөө сааты): Бул долбоор үчүн биз (Алекс Фиел & Анна Линтон) күнүмдүк өлчөөчү куралды алып, аны саатка айландырдык! Баштапкы план учурдагы рулетканы моторлоштуруу болгон. Муну жасоодо, биз өзүбүздүн кабыгыбызды түзүү оңой деп чечтик
Ардуинонун жардамы менен электр менен камсыздоо жыштыгын жана чыңалуусун өлчөө: 6 кадам
Ардуинонун жардамы менен электр менен камсыздоо жыштыгын жана чыңалуусун өлчөө: Киришүү: Бул долбоордун максаты - бул жерде Индияда 220-240 Вольт жана 50Гц ортосунда болгон берүү жыштыгын жана чыңалуусун өлчөө. Мен сигналды кармап, жыштыкты жана чыңалууну эсептөө үчүн Arduino колдондум, сиз башка микроконтту колдонсоңуз болот
Ардуинону колдонуу менен негизги жыштыкты өлчөө: 7 кадам (сүрөттөр менен)
Ардуинону колдонуу менен негизги жыштыкты өлчөгүлө: 3 -апрелде Индиянын премьер -министри Шри. Нарендра Моди Индиянын Корона вирусуна каршы күрөшүн белгилөө үчүн 5 -апрелде кечки саат 9: 00дө жарыкты өчүрүп, чыракты (Дия) күйгүзүү үчүн индиялыктарга кайрылган. Билдирүүдөн кийин эле чоң башаламандык болду
ESP32 COVID19 АБАЛЫН КӨРҮҮЧҮ: 4 кадам
ESP32 COVID19 АБАЛДЫН КӨРҮҮЧҮСҮ: Бул проект жөн эле COCID19 статусун json форматында алат жана OLEDде көрсөтөт
Күйүүчү майдын деңгээлин Arduino менен өлчөө: 4 кадам (сүрөттөр менен)
Күйүүчү майдын деңгээлин Arduino менен өлчөгүлө: Сезгич бирдик адатта потенциометрге туташкан калкып жүрүүнү колдонот, адатта заманбап автомобилде басылган сыя дизайн. Цистерна бошогондо, калкып чыгуучу резистор боюнча жылып бараткан контактты түшүрөт жана жылдырат, анын каршылыгын жогорулатат. [2] Кошумча