ዝርዝር ሁኔታ:

በ ESP32: 6 ደረጃዎች በቫዮሊን ላይ የጣት ቦታዎችን መለካት
በ ESP32: 6 ደረጃዎች በቫዮሊን ላይ የጣት ቦታዎችን መለካት

ቪዲዮ: በ ESP32: 6 ደረጃዎች በቫዮሊን ላይ የጣት ቦታዎችን መለካት

ቪዲዮ: በ ESP32: 6 ደረጃዎች በቫዮሊን ላይ የጣት ቦታዎችን መለካት
ቪዲዮ: ESP32 Tutorial 38 - Controling RGB LED from your mobile phone | SunFounder's ESP32 IoT Learnig kit 2024, ህዳር
Anonim
ከ ESP32 ጋር በቫዮሊን ላይ የጣት ቦታዎችን መለካት
ከ ESP32 ጋር በቫዮሊን ላይ የጣት ቦታዎችን መለካት
ከ ESP32 ጋር በቫዮሊን ላይ የጣት ቦታዎችን መለካት
ከ ESP32 ጋር በቫዮሊን ላይ የጣት ቦታዎችን መለካት

እንደ ቫዮሊን ተጫዋች እኔ ሁል ጊዜ በቫዮሊን ላይ የጣቶቼን አቀማመጥ የሚያሳየኝን መተግበሪያ ወይም መሣሪያ እፈልግ ነበር። በዚህ ፕሮጀክት ይህንን ለመገንባት ሞከርኩ። ምንም እንኳን ይህ አምሳያ ቢሆንም አሁንም ብዙ ባህሪያትን ማከል ይችላሉ።

እኔ ደግሞ ESP32 ን እና rPI ን ለመለየት ሞከርኩ እና ስለሆነም ESP32 ውሂብን ወደ rPi ገመድ አልባ እንዲልክ አደረግኩ። ምናልባት በዚህ ፕሮጀክት ውስጥ በጣም አስቸጋሪው ነገር።

እንዲሁም በዚህ ፕሮጀክት መጨረሻ ላይ በኮምፒተርዎ ላይ ምንም ነገር አለመከማቸቱ በጣም አስፈላጊ ነው ነገር ግን በ rPI ወይም በ ESP32 ላይ ነው።

ደረጃ 1: ቁሳቁሶች እና መሳሪያዎች

ቁሳቁሶች እና መሳሪያዎች
ቁሳቁሶች እና መሳሪያዎች

ይህንን ፕሮጀክት በመገንባት ዝርዝር ውስጥ ከመግባታችን በፊት ጥቂት ነገሮች ያስፈልጉናል።

  1. 4x መስመራዊ ለስላሳ ማስቀመጫ - የጣት ቦታን ለመለካት መስመራዊ ፖታቲዮሜትሮች (ቫዮሊን 4 ሕብረቁምፊዎች አሉት)
  2. ESP32: መረጃውን ከመስመር የለስላሳ ቦታዎች ለማንበብ የ ESP32 ሞዱል።
  3. 4/4 ቫዮሊን - መስመራዊ ለስላሳ መያዣዎችን ከላይ ለማስቀመጥ ቫዮሊን።
  4. ኤስዲ ካርድ ያለው Raspberry Pi: የውሂብ ጎታችንን እና ድርጣቢያችንን የሚያከማች የራስቤሪ ፓይ።
  5. 10 ኪ ፖታቲሞሜትር - ለኤልሲዲ ብሩህነት ፖታቲሞሜትር
  6. ኤልሲዲ-ማያ-ለ rPi የአይፒ አድራሻዎች ለማሳየት የ LCD ማያ ገጽ
  7. የማሸጊያ ኪት - ሁሉንም ንጥረ ነገሮች ለሸቀጣ ሸቀጣ ሸቀጥ
  8. ወንድ-ወደ-ወንድ ሽቦዎች እና ወንድ-ወደ-ሴት ሽቦዎች-ሁሉንም ንጥረ ነገሮች ለማገናኘት ኬብሎች
  9. የማይክሮ ዩኤስቢ ገመድ - ESP32 ን ለማብራት

ደረጃ 2 - ለስላሳ ነጥቦችን ከ ESP32 ጋር ማገናኘት

ለስላሳ ነጥቦችን ከ ESP32 ጋር በማገናኘት ላይ
ለስላሳ ነጥቦችን ከ ESP32 ጋር በማገናኘት ላይ

በመጀመሪያ የእኛን ለስላሳ መያዣዎች ከ esp32 ጋር ማገናኘት አለብን። የግራ እና የቀኝ ፒኖችን ከ 5 ቮ እና ከ GND ጋር እናገናኛለን። በ ESP32 ላይ መካከለኛውን ፒን ከአናሎግ ፒን ጋር እናገናኘዋለን። እንዲሁም የመካከለኛውን ፒን ከ 10 ኪ ኦኤም ተቃውሞ ጋር ማገናኘት እና ይህንን ከ GND ጋር ማገናኘት አለብን። የለስላሳ ማስቀመጫዎቻችን ውጤት የዘፈቀደ እሴት እንዳይመለስ ነው።

ከዚያ ኮዱን ወደ እሱ መስቀል እንድንችል ESP32 ን ከማይክሮ ዩኤስቢ ገመድ ወደ ፒሲአችን እናገናኘዋለን። ESP32 ን ለማዘጋጀት 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;

ለረጅም ጊዜ ያልተፈረመ;

ያልተፈረመ ረጅም softPotTime;

ከዚያ ፒኖቻችንን ማዘጋጀት እንችላለን። እና የእኛን ተከታታይ ተቆጣጣሪ እና ጊዜያችንን መጀመር አለብን።

ባዶነት ማዋቀር () {

onTime = ሚሊስ ();

Serial.begin (115200);

Serial.println ("የፕሮግራም መጀመሪያ");

pinMode (SOFT_POT_PIN1 ፣ ማስገቢያ);

pinMode (SOFT_POT_PIN2 ፣ ማስገቢያ);

pinMode (SOFT_POT_PIN3 ፣ INPUT);

pinMode (SOFT_POT_PIN4 ፣ ማስገቢያ); }

ባዶነት getdata (ባይት pdata ) {

// ለስላሳው ድስት የኤዲሲ እሴት ያንብቡ

ከዚያ የእኛን ውሂብ ለመቀበል እንድንችል ፒኖቻችንን ማንበብ አለብን።

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] = እኔ;

pdata [1] = softpot;

pdata [2] = ሚሊስ ();

} } }

}

ደረጃ 3 - ESP32 ን እና RPI ን ያለገመድ ማገናኘት

ESP32 ን እና RPI ን ያለገመድ ለማገናኘት ዌብሶኬት የተባለ ቤተመጽሐፍት እንጠቀማለን። ይህንን ቤተመጽሐፍት ለመጫን ፋይሎቹን እዚህ ማግኘት እንችላለን። ይህንን ቤተ -መጽሐፍት ለ ESP32 ለመጠቀም በፋይሎቹ ውስጥ አንዳንድ ኮድ መለወጥ ያስፈልገናል።

MD5.c እና MD5.h ን መለወጥ ያስፈልገናል።

  • MD5Init ወደ MD5InitXXX
  • MD5Update ወደ MD5UpdateXXX
  • MD5Final ወደ MD5FinalXXX

እንዲሁም በ sha1 ፋይሎች ውስጥ የ avr/io.h መስመሮችን መሰረዝ አለብን።

ከዚያ ቤተመፃህፍቱን ወደ አርዱinoኖ አይዲኢ በንድፍ / ማከል / ቤተመፃሕፍት ማካተት>. 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 አገልጋይ መመደብ

የ WiFi አገልጋይ አገልጋይ (80);

የእኛ የድር ሶኬት አገልጋይ በመጀመር ላይ

WebSocketServer webSocketServer;

የእኛን SSID እና የ wifi ይለፍ ቃል መመደብ

const char* ssid = "የእርስዎ wifi SSID";

const char* password = "የእርስዎ wifi ይለፍ ቃል";

ባዶነት ማዋቀር () {

ተከታታይ ማሳያዎን በማዋቀር ላይ

Serial.begin (115200);

ለስላሳዎችዎ ማቀናበር

pinMode (SOFT_POT_PIN1 ፣ ማስገቢያ);

pinMode (SOFT_POT_PIN2 ፣ INPUT);

pinMode (SOFT_POT_PIN3 ፣ ማስገቢያ);

pinMode (SOFT_POT_PIN4 ፣ ማስገቢያ);

የእኛን wifi በመጀመር እና ከእሱ ጋር መገናኘት

WiFi.begin (ssid ፣ የይለፍ ቃል);

ሳለ (WiFi.status ()! = WL_CONNECTED) {

መዘግየት (1000);

Serial.println ("ከ WiFi ጋር መገናኘት.."); }

Serial.println ("ከ WiFi አውታረ መረብ ጋር ተገናኝቷል");

Serial.println (WiFi.localIP ());

server.begin (); መዘግየት (100); }

ባዶነት getdata (ቻር *pdata) {

ውሂብዎን በማንበብ ላይ

// ለስላሳው ድስት የኤዲሲ እሴት ያንብቡ

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 ());

}

ባዶነት loop () {

ደንበኛዎን (አርፒአይ) በማገናኘት ላይ

የ WiFiClient ደንበኛ = አገልጋይ. ይገኛል ();

ከሆነ (client.connected ()) {

መዘግየት (10);

ከሆነ (webSocketServer.handshake (ደንበኛ)) {

Serial.println ("ደንበኛ ተገናኝቷል");

ውሂብ መላክ እና መቀበል።

ሳለ (client.connected ()) {

የቻር መረጃ [30];

getdata (ውሂብ);

Serial.println (ውሂብ);

webSocketServer.sendData (ውሂብ);

መዘግየት (10); // ውሂቡን በትክክል ለመቀበል መዘግየት ያስፈልጋል}

Serial.println ("ደንበኛው ተቋርጧል");

መዘግየት (100); }

ሌላ {

Serial.println ("shitsfuckedyo");

} } }

ከዚያ በፓይዘን ውስጥ ለ rPI-

ቤተመፃህፍቶቻችንን ማስመጣት

የ websocketimport ጊዜን ያስመጡ

ግሎባሌ variabel i በመመደብ ላይ

i = 0

ልንቀበላቸው የምንችለውን ከፍተኛውን የ 200 መልዕክቶችን ማቀናበር

nrOfMessages = 200

ክፍል Websocket ():

def _init _ (ራስን) ፦

የእኛን የድር ሶኬት ማስጀመር እና ከእኛ ESP32 ጋር ማገናኘት

self.ws = websocket. WebSocket ()

self.ws.connect ("ws: //172.30.248.48/")

የእኛን ውሂብ መቀበል

ራስን የማጥፋት ሥራ (ራስን);

self.ws.send ("መልዕክት nr: 0")

ውጤት = self.ws.recv () ጊዜ. እንቅልፍ (0.5) የመመለሻ ውጤት

ሁሉንም ነገር ከተቀበለ በኋላ የድረ -ገጹን መዘጋት

def close (ራስን) ፦

self.ws. Close ()

ደረጃ 4 - ድር ጣቢያዎን እና የውሂብ ጎታዎን ማገናኘት

የእኛን የውሂብ ጎታ እና ድርጣቢያ ለማገናኘት በመጀመሪያ mariadb ን በመጫን የውሂብ ጎታዎን በሱ ላይ መፍጠር ያስፈልግዎታል -sudo apt install mariadb።

ከዚያ ይህንን በማድረግ ሊያገኙት ይችላሉ- sudo mariadb.

ከዚያ ድር ጣቢያዎን መፍጠር ያስፈልግዎታል። እርስዎ በሚፈልጉት መንገድ ይህንን ማድረግ ይችላሉ ፣ ግን ፍላስክን መጠቀም አለብዎት እና መረጃዎን ለማቆም እና ለመጀመር በኤችቲኤምኤልዎ ውስጥ ቅጽ እንዲኖርዎት ያስፈልጋል።

ከዚያ የውሂብ ጎታዎን እና ድር ጣቢያዎን ለማገናኘት ይህንን ኮድ ማስገባት ይችላሉ (የእርስዎ ድር ጣቢያ እና የውሂብ ጎታ ሁለቱም በፓይዎ ላይ መሆን አለባቸው ፣ ይህ በፒቻም ቅንብሮች ውስጥ የማሰማሪያ ትርን በመጠቀም ሊከናወን ይችላል)

ከ 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 ()

ማተም ("መረጃ ማግኘት")

ሞክር

ማተም (ስኩዌር)

cursor.execute (sql ፣ params)

በስተቀር እንደ e:

ማተም (ሠ)

መመለስ ሐሰት

ውጤት = cursor.fetchall ()

ውሂብ =

በውጤት ረድፍ

data.append (ዝርዝር (ረድፍ))

cursor.close ()

conn.close ()

ውሂብ ይመልሱ

በእኛ የውሂብ ጎታ ውስጥ መረጃን የማስገባት ተግባር

def set_data (sql ፣ params = የለም) ፦

conn = mysql.connect ()

ጠቋሚ = conn.cursor ()

ሞክር

log.debug (ስኩዌር)

cursor.execute (sql ፣ params) conn.commit ()

log.debug ("SQL uitgevoerd")

በስተቀር እንደ e:

log.exception ("Fout bij uitvoeren van sql: {0})". ቅርጸት (ሠ))

መመለስ ሐሰት

cursor.close ()

conn.close ()

እውነት ተመለስ

እርስዎ በሚቀረጹበት ጊዜ ሌሎች ነገሮችን ማድረግ እንዲችሉ የእኛን ትግበራ ክር ማያያዝ አለብን።

ክፍል ThreadedTask (threading. Thread):

def _init _ (ራስን ፣) ፦

ክር በማቀናበር ላይ

threading. Thread._ init _ (ራስን)

የተቀበሉትን ውሂብ ሁሉ ለመያዝ ዝርዝር መፍጠር

self.data_all =

def run (ራስን):

ጊዜ። እንቅልፍ (5)

ውሂቡን የሚቀበሉበት የራስዎን የፓይዘን ኮድ ያስመጡ

ማስመጣት_ዌብሶኬት ያስመጡ

ውሂብዎን ይቀበሉ

w = we_sobsocket. Websocket ()

በእርስዎ ዝርዝር ውስጥ ውሂብዎን ያክሉ እና ያትሙት።

በእኔ ክልል ውስጥ (0 ፣ 200) ፦

self.data_all.append (w.work ()። መከፋፈል ("፣"))

ማተም (self.data_all)

ተግባር = ThreadedTask ()

ከዚያ ክርዎን ለመጀመር እና ውሂብ መቀበል ለመጀመር task.run () ማድረግ ይችላሉ።

ደረጃ 5 ሁሉንም ነገር በአንድ ላይ ማገናኘት

ሁሉንም ነገር በአንድ ላይ ማገናኘት
ሁሉንም ነገር በአንድ ላይ ማገናኘት

ድር ጣቢያዎን ከእርስዎ ፒ ለማሄድ አንድ አገልግሎት መጠቀም አለብዎት-

[ክፍል] ፕሮጀክት1 የድር በይነገጽን ለማገልገል መግለጫ = uWSGI ምሳሌ

በኋላ = network.target

BindsTo = mysqld.service

በኋላ = mysqld.service

[አገልግሎት]

ወደ ተጠቃሚዎ ይለውጡ

ተጠቃሚ = ፒ

ቡድን = www-ውሂብ

የፍላሽክ ፋይልዎን ማውጫ እዚህ ማስገባት አለብዎት

WorkingDirectory =/home/pi/project1/ድር

በኋላ ሊገኝ የሚችል የእርስዎ ini ፋይል ማውጫ።

ExecStart =/usr/bin/uwsgi --ini /home/pi/project1/conf/uwsgi-flask.ini

[ጫን]

WantedBy = multi-user.target

ከላይ በ ExecStart ውስጥ በገለፁት ማውጫ ውስጥ ማስቀመጥ ያለብዎት uwsgi-flask.ini

[uwsgi] ሞዱል = ድር: መተግበሪያ virtualenv =/home/pi/project1/env

ዋና = እውነተኛ ሂደቶች = 5

ተሰኪዎች = python3

ሶኬት = ፕሮጀክት 1.ሶክ chmod-socket = 660 vacuum = true

መሞት-ላይ-ጊዜ = እውነት

አሁን ውሂብዎን ማንበብ እና በድር ጣቢያዎ ላይ ማሳየት ይችላሉ።

ደረጃ 6 - ተጨማሪ - ኤልሲዲ ማያ ገጽን በማገናኘት ላይ

ተጨማሪ: ኤልሲዲ ማያ ገጽን በማገናኘት ላይ
ተጨማሪ: ኤልሲዲ ማያ ገጽን በማገናኘት ላይ
ተጨማሪ: ኤልሲዲ ማያ ገጽን በማገናኘት ላይ
ተጨማሪ: ኤልሲዲ ማያ ገጽን በማገናኘት ላይ
ተጨማሪ: ኤልሲዲ ማያ ገጽን በማገናኘት ላይ
ተጨማሪ: ኤልሲዲ ማያ ገጽን በማገናኘት ላይ

ለድር ጣቢያችን የእኛን ፒ አይ-አድራሻውን ለማሳየት የ LCD ማያ ገጽ ማገናኘት እንችላለን።

RPi. GPIO ን እንደ GPIO ያስመጡ

የማስመጣት ትዕዛዞች

GPIO. Cananup ()

D0 = 22

D1 = 5

D2 = 6

D3 = 13

D4 = 19

D5 = 26

D6 = 20

D7 = 21

ዝርዝር = [22, 5, 6, 13, 19, 26, 20, 21]

ኢ = 24

አርኤስ = 23

የክፍል ማያ ገጽ;

def _init _ (ራስን) ፦

GPIO.setmode (GPIO. BCM)

ራስን ማዋቀር ()

#የድርጊት ስብስብ የራስ። ፣ RS] ፣ GPIO. OUT)

def stuur_instructie (ራስ ፣ ባይት) ፦

GPIO.output (E ፣ GPIO. HIGH)

GPIO.output (RS ፣ GPIO. LOW)

ራስን። ቅንብር_GPIO_bits (ባይት)

ጊዜ. እንቅልፍ (0.005)

GPIO.output (E ፣ GPIO. LOW)

def stuur_teken (ራስ ፣ ቻር) ፦

temp = ord (ቻር)

GPIO.output (E ፣ GPIO. HIGH)

GPIO.output (RS ፣ GPIO. HIGH)

ራስን ።.

ጊዜ. እንቅልፍ (0.005)

GPIO.output (E ፣ GPIO. LOW)

def set_GPIO_bits (ራስ ፣ ባይት) ፦

በእኔ ክልል ውስጥ (0 ፣ 8) ፦

ከሆነ (ባይት እና (2 ** i)) == 0:

GPIO.output (ዝርዝር ፣ GPIO. LOW)

ሌላ

GPIO.output (ዝርዝር ፣ GPIO. HIGH)

def ዋና ():

s = ማያ ገጽ ()

teken = "አካባቢያዊ አይፒ አድራሻ"

በቴክ ለደብዳቤ -

ስቱር_ቴከን (ፊደል)

teken2 = command.getoutput ("ip addr show wlan0 | grep -Po 'inet / K [d.]+'")

ህትመት (teken2)

s.stuur_instructie (0xc0)

በቴክ 2 ለደብዳቤ 2

ስቱር_ቴከን (ፊደል 2)

_name_ == '_main_': #ፕሮግራም ከዚህ ይጀምራል

ሞክር

ዋና ()

ከቁልፍ ሰሌዳ ማቋረጫ በስተቀር

ማለፍ

ከዚያ ጅምር ላይ ኤልሲዲውን ለመጀመር አገልግሎት መፍጠር እንችላለን።

የሚመከር: