সুচিপত্র:

ESP32: 6 ধাপ সহ বেহালায় আঙুলের অবস্থান পরিমাপ করা
ESP32: 6 ধাপ সহ বেহালায় আঙুলের অবস্থান পরিমাপ করা

ভিডিও: ESP32: 6 ধাপ সহ বেহালায় আঙুলের অবস্থান পরিমাপ করা

ভিডিও: ESP32: 6 ধাপ সহ বেহালায় আঙুলের অবস্থান পরিমাপ করা
ভিডিও: ESP32 Tutorial 6 - Using RGB LED Project 2.3 -SunFounder's ESP32 IoT Learnig kit 2024, জুলাই
Anonim
ESP32 দিয়ে বেহালায় আঙুলের অবস্থান পরিমাপ করা
ESP32 দিয়ে বেহালায় আঙুলের অবস্থান পরিমাপ করা
ESP32 দিয়ে বেহালায় আঙুলের অবস্থান পরিমাপ করা
ESP32 দিয়ে বেহালায় আঙুলের অবস্থান পরিমাপ করা

ভায়োলিন প্লেয়ার হিসেবে আমি সবসময় এমন একটি অ্যাপ বা টুল চাইতাম যা আমাকে খুব সঠিকভাবে বেহালায় আমার আঙ্গুলের অবস্থান দেখাতে পারে। এই প্রকল্পের সাথে আমি এটি নির্মাণ করার চেষ্টা করেছি। যদিও এটি একটি প্রোটোটাইপ এবং আপনি এখনও অনেক বৈশিষ্ট্য যোগ করতে পারেন।

আমি ESP32 এবং rPI কে আলাদা করার চেষ্টা করেছি এবং এইভাবে আমি ESP32 কে rPi তে ডেটা ওয়্যারলেস পাঠিয়েছি। যা সম্ভবত এই প্রকল্পের সবচেয়ে কঠিন বিষয়।

এটি খুব গুরুত্বপূর্ণ যে এই প্রকল্পের শেষে আপনার কম্পিউটারে কিছুই সংরক্ষণ করা হয় না তবে এটি হয় আরপিআই বা ইএসপি 32 তে।

ধাপ 1: উপকরণ এবং সরঞ্জাম

উপকরণ এবং সরঞ্জাম
উপকরণ এবং সরঞ্জাম

এই প্রকল্পটি নির্মাণের সুনির্দিষ্ট তথ্য পাওয়ার আগে আমাদের কয়েকটি জিনিস দরকার।

  1. 4x লিনিয়ার সফটপট: একটি আঙুলের অবস্থান পরিমাপ করার জন্য লিনিয়ার পটেনশিয়োমিটার (একটি বেহালায় 4 টি স্ট্রিং থাকে)
  2. ESP32: লিনিয়ার সফটপট থেকে ডেটা পড়ার জন্য একটি ESP32 মডিউল।
  3. একটি 4/4 বেহালা: উপরে একটি রৈখিক সফটপট রাখার জন্য একটি বেহালা।
  4. একটি এসডি কার্ড সহ একটি রাস্পবেরি পাই: একটি রাস্পবেরি পাই যা আমাদের ডাটাবেস এবং ওয়েবসাইট সংরক্ষণ করবে।
  5. 10k potentiometer: LCD এর উজ্জ্বলতার জন্য একটি potentiometer
  6. এলসিডি-স্ক্রিন: একটি এলসিডি স্ক্রিন যা আরপিআই এর আইপি অ্যাড্রেসগুলিতে দেখানো হয়
  7. সোল্ডারিং কিট: সোল্ডারিংয়ের জন্য সমস্ত উপাদান টোগেটার
  8. পুরুষ থেকে পুরুষ তারের এবং পুরুষ থেকে মহিলা তারের: সমস্ত উপাদান সংযোগের জন্য তারগুলি
  9. মাইক্রো ইউএসবি কেবল: ইএসপি 32 পাওয়ার করার জন্য

ধাপ 2: সফটপটগুলিকে ESP32 এর সাথে সংযুক্ত করা

সফটপটগুলিকে ESP32 এর সাথে সংযুক্ত করা হচ্ছে
সফটপটগুলিকে ESP32 এর সাথে সংযুক্ত করা হচ্ছে

সবার আগে আমাদের সফটপটগুলিকে esp32 এর সাথে সংযুক্ত করতে হবে। আমরা যথাক্রমে 5V এবং GND এর সাথে বাম এবং ডান পিন সংযুক্ত করি। আমরা ESP32 এ একটি এনালগ পিনের সাথে মাঝের পিনটি সংযুক্ত করি। আমাদের মধ্যের পিনটি 10k ওহমের প্রতিরোধের সাথে সংযুক্ত করতে হবে এবং এটিকে GND এর সাথে সংযুক্ত করতে হবে। এর ফলে আমাদের সফটপটের আউটপুট এলোমেলো মান ফেরত দেয় না।

তারপরে আমরা আমাদের কম্পিউটারে মাইক্রো ইউএসবি তারের সাথে ESP32 সংযুক্ত করি যাতে আমরা এতে কোড আপলোড করতে পারি। আমরা 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;

স্বাক্ষরিত দীর্ঘ অন টাইম;

স্বাক্ষরবিহীন দীর্ঘ সফটপটটাইম;

তারপর আমরা আমাদের পিন সেট আপ করতে পারেন। এবং আমাদের আমাদের সিরিয়াল মনিটর এবং আমাদের সময় শুরু করতে হবে।

অকার্যকর সেটআপ() {

অন টাইম = মিলিস ();

Serial.begin (115200);

Serial.println ("প্রোগ্রাম শুরু");

পিনমোড (SOFT_POT_PIN1, ইনপুট);

পিনমোড (SOFT_POT_PIN2, ইনপুট);

পিনমোড (SOFT_POT_PIN3, ইনপুট);

পিনমোড (SOFT_POT_PIN4, ইনপুট); }

অকার্যকর getdata (বাইট 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 = নাম ;

যদি (সফটপট> 10) {

pdata [0] = আমি;

pdata [1] = সফটপট;

pdata [2] = মিলিস ();

} } }

}

ধাপ 3: ESP32 এবং RPI ওয়্যারলেস সংযোগ করা

ইএসপি 32 এবং আরপিআইকে ওয়্যারলেসভাবে সংযুক্ত করার জন্য, আমরা ওয়েবসকেট নামে একটি লাইব্রেরি ব্যবহার করব। এই লাইব্রেরি ইনস্টল করার জন্য, আমরা ফাইলগুলি এখানে পেতে পারি। ESP32 এর জন্য এই লাইব্রেরিটি ব্যবহার করার জন্য আমাদের ফাইলগুলিতে কিছু কোড পরিবর্তন করতে হবে।

আমাদের MD5.c এবং MD5.h পরিবর্তন করতে হবে।

  • MD5Init থেকে MD5InitXXX
  • MD5 আপডেট MD5UpdateXXX
  • MD5Final থেকে MD5FinalXXX

আমাদের sha1 ফাইলে avr/io.h লাইন মুছে ফেলতে হবে।

তারপরে আমরা আমাদের Arduino IDE- তে স্কেচ> লাইব্রেরি অন্তর্ভুক্ত> 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;

আমাদের ওয়াইফাই সার্ভার বরাদ্দ করা হচ্ছে

ওয়াইফাই সার্ভার সার্ভার (80);

আমাদের ওয়েবসকেট সার্ভার শুরু হচ্ছে

ওয়েবসকেট সার্ভার ওয়েবসকেট সার্ভার;

আমাদের SSID এবং আপনার ওয়াইফাই এর পাসওয়ার্ড বরাদ্দ করা হচ্ছে

const char* ssid = "আপনার ওয়াইফাই SSID";

const char* password = "আপনার ওয়াইফাই পাসওয়ার্ড";

অকার্যকর সেটআপ() {

আপনার সিরিয়াল মনিটর সেট আপ করা হচ্ছে

Serial.begin (115200);

আপনার সফটপট সেট আপ করা হচ্ছে

পিনমোড (SOFT_POT_PIN1, ইনপুট);

পিনমোড (SOFT_POT_PIN2, ইনপুট);

পিনমোড (SOFT_POT_PIN3, ইনপুট);

পিনমোড (SOFT_POT_PIN4, ইনপুট);

আমাদের ওয়াইফাই শুরু করা এবং এর সাথে সংযোগ স্থাপন করা

WiFi.begin (ssid, password);

যখন (WiFi.status ()! = WL_CONNECTED) {

বিলম্ব (1000);

Serial.println ("ওয়াইফাই এর সাথে সংযোগ স্থাপন.."); }

Serial.println ("ওয়াইফাই নেটওয়ার্কের সাথে সংযুক্ত");

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

}

অকার্যকর লুপ () {

আপনার ক্লায়েন্টকে সংযুক্ত করা হচ্ছে (আরপিআই)

WiFiClient client = server.available ();

যদি (client.connected ()) {

বিলম্ব (10);

যদি (webSocketServer.handshake (ক্লায়েন্ট)) {

Serial.println ("ক্লায়েন্ট সংযুক্ত");

ডেটা পাঠানো এবং গ্রহণ করা।

while (client.connected ()) {

চার ডেটা [30];

getdata (ডেটা);

Serial.println (তথ্য);

webSocketServer.sendData (ডেটা);

বিলম্ব (10); // সঠিকভাবে ডেটা পাওয়ার জন্য বিলম্ব প্রয়োজন}

Serial.println ("ক্লায়েন্ট সংযোগ বিচ্ছিন্ন");

বিলম্ব (100); }

অন্য {

Serial.println ("shitsfuckedyo");

} } }

তারপর পাইথনে 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")

ফলাফল = self.ws.recv () time.sleep (0.5) রিটার্ন ফলাফল

সবকিছু পাওয়ার পর ওয়েবসকেট বন্ধ করা

def বন্ধ (স্ব):

self.ws.close ()

ধাপ 4: আপনার ওয়েবসাইট এবং ডাটাবেস সংযুক্ত করা

আমাদের ডাটাবেস এবং ওয়েবসাইট সংযুক্ত করার ক্ষেত্রে, আপনাকে প্রথমে মারিয়াডবি: সুডো এপট ইনস্টল মারিয়াডবি ইনস্টল করে পাইতে আপনার ডাটাবেস তৈরি করতে হবে।

তারপরে আপনি এটি করতে পারেন: sudo mariadb।

তারপর আপনাকে আপনার ওয়েবসাইট তৈরি করতে হবে। আপনি চাইলে এটি করতে পারেন, কিন্তু আপনাকে ফ্লাস্ক ব্যবহার করতে হবে এবং আপনার ডাটা বন্ধ এবং শুরু করার জন্য আপনার HTML এ একটি ফর্ম থাকতে হবে।

তারপরে আপনি আপনার ডাটাবেস এবং আপনার ওয়েবসাইটকে সংযুক্ত করতে এই কোডটি সন্নিবেশ করতে পারেন (আপনার ওয়েবসাইট এবং ডাটাবেস উভয়ই আপনার পাইতে থাকতে হবে, এটি পাইচার্মের সেটিংসে স্থাপনার ট্যাব ব্যবহার করে করা যেতে পারে)

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)

ই হিসাবে ব্যতিক্রম ছাড়া:

মুদ্রণ (ই)

মিথ্যা প্রত্যাবর্তন

ফলাফল = 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")

ই হিসাবে ব্যতিক্রম ছাড়া:

log.exception ("Fout bij uitvoeren van sql: {0})"। ফরম্যাট (e))

মিথ্যা প্রত্যাবর্তন

cursor.close ()

conn.close ()

সত্য ফিরে

আমাদের অ্যাপ্লিকেশনটি থ্রেড করতে হবে যাতে আপনি রেকর্ড করার সময় অন্যান্য কাজ করতে পারেন।

ক্লাস থ্রেডেড টাস্ক (থ্রেডিং। থ্রেড):

def _init _ (self,):

থ্রেড সেট আপ

থ্রেডিং। থ্রেড._ init _ (স্ব)

আপনার প্রাপ্ত সমস্ত ডেটা রাখার জন্য একটি তালিকা তৈরি করা

self.data_all =

ডিফ রান (স্ব):

সময় ঘুম (5)

আপনার নিজস্ব পাইথন কোড আমদানি করুন যেখানে আপনি তথ্য পাবেন

আমদানি রিসিভ_ওয়েবসকেট

আপনার ডেটা গ্রহণ করুন

w = receive_websocket. Websocket ()

আপনার তালিকায় আপনার ডেটা যুক্ত করুন এবং এটি মুদ্রণ করুন।

আমি পরিসরে (0, 200) জন্য:

self.data_all.append (w.work ()। split (","))

মুদ্রণ (self.data_all)

টাস্ক = থ্রেডেড টাস্ক ()

তারপরে আপনি আপনার থ্রেড শুরু করতে এবং ডেটা পেতে শুরু করতে task.run () করতে পারেন।

ধাপ 5: সবকিছু একসাথে সংযুক্ত করা

সবকিছু একসাথে সংযুক্ত করা
সবকিছু একসাথে সংযুক্ত করা

আপনার পাই থেকে আপনার ওয়েবসাইট চালানোর জন্য আপনাকে একটি পরিষেবা ব্যবহার করতে হবে:

[ইউনিট] project1 ওয়েব ইন্টারফেস পরিবেশন করার জন্য বর্ণনা = uWSGI উদাহরণ

পরে = network. Target

BindsTo = mysqld.service

পরে = mysqld.service

[পরিষেবা]

আপনার ব্যবহারকারীর পরিবর্তন করুন

ব্যবহারকারী = পাই

গ্রুপ = www- ডাটা

এখানে আপনাকে আপনার ফ্লাস্ক ফাইলের ডিরেক্টরি লিখতে হবে

ওয়ার্কিং ডিরেক্টরি =/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

প্লাগইন = পাইথন 3

socket = project1.sock chmod-socket = 660 vacuum = true

ডাই-অন-টার্ম = সত্য

এখন আপনি আপনার ডেটা পড়তে পারেন এবং আপনার ওয়েবসাইটে এটি প্রদর্শন করতে পারেন।

ধাপ 6: অতিরিক্ত: এলসিডি স্ক্রিন সংযুক্ত করা

অতিরিক্ত: সংযোগকারী এলসিডি স্ক্রিন
অতিরিক্ত: সংযোগকারী এলসিডি স্ক্রিন
অতিরিক্ত: সংযোগকারী এলসিডি স্ক্রিন
অতিরিক্ত: সংযোগকারী এলসিডি স্ক্রিন
অতিরিক্ত: সংযোগকারী এলসিডি স্ক্রিন
অতিরিক্ত: সংযোগকারী এলসিডি স্ক্রিন

আমরা একটি এলসিডি স্ক্রিন সংযুক্ত করতে পারি যাতে আমরা আমাদের ওয়েবসাইটের জন্য আমাদের পাই এর আইপি-ঠিকানা প্রদর্শন করতে পারি।

RPi. GPIO আমদানি GPIOimport সময় হিসাবে

কমান্ড আমদানি করুন

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]

ই = 24

RS = 23

ক্লাস স্ক্রিন:

def _init _ (স্ব):

GPIO.setmode (GPIO. BCM)

self.setup ()

#ফাংশন সেট self.stuur_instructie (0x3f) #সেলফি প্রদর্শন করুন।, RS], GPIO. OUT)

def stuur_instructie (স্ব, বাইট):

GPIO.output (E, GPIO. HIGH)

GPIO.output (RS, GPIO. LOW)

self.set_GPIO_bits (বাইট)

সময় ঘুম (0.005)

GPIO.output (E, GPIO. LOW)

def stuur_teken (স্ব, চর):

temp = ord (char)

GPIO.output (E, GPIO. HIGH)

GPIO.output (RS, GPIO. HIGH)

self.set_GPIO_bit (temp)

সময় ঘুম (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 main ():

s = পর্দা ()

টেকেন = "স্থানীয় আইপি ঠিকানা:"

টেকনে চিঠির জন্য:

s.stuur_teken (চিঠি)

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

মুদ্রণ (টেকেন 2)

s.stuur_instructie (0xc0)

টেকেন 2 এ লেটার 2 এর জন্য:

s.stuur_teken (letter2)

যদি _name_ == '_main_': #প্রোগ্রাম এখান থেকে শুরু হয়

চেষ্টা করুন:

প্রধান ()

কীবোর্ড ব্যতীত:

পাস

তারপরে আমরা স্টার্ট-আপে এলসিডি চালু করার জন্য একটি পরিষেবা তৈরি করতে পারি।

প্রস্তাবিত: