Სარჩევი:

ESP8266 პირდაპირი მონაცემთა კომუნიკაცია: 3 ნაბიჯი
ESP8266 პირდაპირი მონაცემთა კომუნიკაცია: 3 ნაბიჯი

ვიდეო: ESP8266 პირდაპირი მონაცემთა კომუნიკაცია: 3 ნაბიჯი

ვიდეო: ESP8266 პირდაპირი მონაცემთა კომუნიკაცია: 3 ნაბიჯი
ვიდეო: How to use ESP32 WiFi and Bluetooth with Arduino IDE full details with examples and code 2024, ნოემბერი
Anonim
ESP8266 პირდაპირი მონაცემთა კომუნიკაცია
ESP8266 პირდაპირი მონაცემთა კომუნიკაცია

შესავალი

Arduinos– ისა და nRF24l01 მოდულებით რამდენიმე პროექტის განხორციელებისას მაინტერესებდა, შემეძლო თუ არა ძალისხმევის დაზოგვა ESP8266 მოდულის ნაცვლად. ESP8266 მოდულის უპირატესობა ის არის, რომ იგი შეიცავს მიკრო კონტროლერს ბორტზე, ამიტომ არ არის საჭირო დამატებითი Arduino დაფა. დამატებით ESP8266 მეხსიერების ზომა გაცილებით დიდია და რაც შეეხება სიჩქარეს ESP8266 მუშაობს მაქსიმუმ 160 MHz– ზე Arduino– ს 16 MHz– ის ნაცვლად. რა თქმა უნდა, არსებობს უარყოფითი მხარეები.

ESP8266 მუშაობს მხოლოდ 3.3 ვ -ზე, აქვს ნაკლები ქინძისთავები და აკლია არდუინოს ლამაზი ანალოგური საშუალებები (მას აქვს ერთი, მაგრამ მხოლოდ 1.0 ვ და არა 3.3 ვ). გარდა ამისა, არსებობს მრავალი სხვა კოდის მაგალითი Arduino + nRF24l01– სთვის, ასევე ESP8266– ისთვის, განსაკუთრებით მაშინ, როდესაც საქმე ეხება მონაცემთა პირდაპირ გადაცემას.

პროექტის გათვალისწინებით, მე ჩავხედე ორი ESP8266 მონაცემთა სწრაფი და მსუბუქი გადაცემის თემას WWW და HTTP პერსონალის გარეშე.

ინტერნეტში მაგალითების ძებნისას (ქვემოთ მოყვანილი კოდის უმეტესი ნაწილი ამოღებულია ქსელიდან სხვადასხვა ადგილას) მე წავაწყდი ბევრ კითხვას, თუ როგორ განვახორციელო მონაცემთა პირდაპირი გადაცემა ლამაზი "ამის გაკეთება ასე" მაგალითების გარეშე. იყო კოდის მაგალითი, მაგრამ ძირითადად კითხვაზე, თუ რატომ არ იმუშავა.

ასე რომ, წაკითხვისა და გააზრების მცდელობის შემდეგ, მე შევქმენი ქვემოთ მოყვანილი მაგალითები, რომლებიც იძლევა მონაცემების სწრაფ და მარტივ გადაცემას ორ ESP8266- ს შორის.

ნაბიჯი 1: საზღვრები და ფონი (TCP წინააღმდეგ UDP)

იქ მისასვლელად, ზოგიერთი საზღვარი უნდა დაზუსტდეს nRF24l01– თან შედარებით.

ESP8266 არდუინოს გარემოში გამოსაყენებლად, ძირითადი ბიბლიოთეკა არის ESP8266WiFi.h. შეიძლება განსხვავებული იყოს, მაგრამ მაგალითების უმეტესობა იყენებს აღნიშნულს. ამის გამოყენებისას, თქვენ უნდა მიიღოთ თქვენი კომუნიკაცია WiFi დონეზე.

ასე რომ, კომუნიკაციისთვის საჭიროა იყოს მინიმუმ წვდომის წერტილი (AP) / სერვერი და კლიენტი. AP შეიცავს ქსელის სახელს და IP მისამართებს და კლიენტი დაუკავშირდება ამ სერვერს.

ასე რომ, შევადარეთ nRF24l01, სადაც კოდი ორივე ბოლოში მეტნაკლებად იგივეა (გარდა გადამცემი არხებისა) ESP8266 კოდი ფუნდამენტურად განსხვავებულია, რადგან ერთი კონფიგურირებულია როგორც AP, ხოლო მეორე კლიენტი.

შემდეგი თემა არის ის, რომ ნაცვლად იმისა, რომ მხოლოდ რამდენიმე ბაიტი გაგზავნოთ nRF24l01– ზე, ESP8266– ის გადაცემის პროტოკოლების დაცვაა საჭირო.

არსებობს ორი გავრცელებული პროტოკოლი: TCP და UDP.

TCP (გადაცემის კონტროლის პროტოკოლი) არის პროტოკოლი, რომელიც საშუალებას იძლევა გადაეცეს სერვერსა და კლიენტს შორის ზარალის გარეშე. პროტოკოლი მოიცავს „ხელის ჩამორთმევას“(ბევრი დროშა და აკრძალვა გაგზავნილი ორივე მხარეს შორის) და პაკეტების ნუმერაცია და გამოვლენა დაკარგული პაკეტების იდენტიფიცირებისა და ხელახალი გადაცემის მიზნით. გარდა ამისა, ყველა ამ ხელის ჩამორთმევის საშუალებით პროტოკოლი ხელს უშლის მონაცემების დაკარგვას ქსელში ერთდროულად გაგზავნილი მრავალი პაკეტის გამო. მონაცემთა პაკეტები დაელოდება მათ მიღებას.

UDP (User Datagram Protocol) აკლია ხელის ჩამორთმევა, პაკეტების ნუმერაცია და ხელახალი გადაცემა. ამიტომ მისი ზედაპირი უფრო მცირეა და არ არის საჭირო ყველა ხელის ჩამორთმევა კავშირის შესანარჩუნებლად. UDP აერთიანებს შეცდომების გამოვლენის ძირითად ნაწილს, მაგრამ არა შესწორებას (კორუმპირებული პაკეტი უბრალოდ იშლება). მონაცემები იგზავნება, ცოდნის გარეშე, თუ მიმღები მხარე თავისუფალია მიიღოს მონაცემები. ამავდროულად, მრავალი პაკეტი შეიძლება შეჯახდეს, რადგან თითოეული მხარე აგზავნის მონაცემებს, როდესაც ეს საჭიროა. ხელის ჩამორთმევის გამოტოვებით, არის UDP– ის კიდევ ერთი სასიამოვნო ფუნქცია სახელწოდებით "multicast" და "broadcast". "მულტიკასტის" შემთხვევაში მონაცემთა პაკეტები იგზავნება წევრების წინასწარ განსაზღვრულ ჯგუფში, ხოლო "მაუწყებლობის" მონაცემების პაკეტები იგზავნება ყველა დაკავშირებულ წევრთან. ეს მნიშვნელოვნად ამცირებს მონაცემთა გადაცემას იმ შემთხვევაში, თუ ნაკადები მიიღება რამდენიმე წევრის მიერ (მაგ. ვიდეო მიმღების გაგზავნით მრავალ მიმღებზე ან მიმდინარე დროის გაგზავნით მრავალ დაკავშირებულ მოწყობილობაზე).

Youtube– ზე არის რამდენიმე კარგი ვიდეო, რომელიც ამას უკეთესად ხსნის.

ასე რომ, მონაცემების გაგზავნისას მნიშვნელოვანია იცოდეთ თქვენი საჭიროებები:

  • არაკორუმპირებული მონაცემები, მრავალი თანატოლის მართვა ხელის ჩამორთმევით → TCP
  • რეალურ დროში მონაცემები, სწრაფი კავშირი → UDP

მე პირველად დავიწყე TCP დაფუძნებული კომუნიკაციის განხორციელებით (ერთ სერვერსა და ერთ კლიენტს შორის). მისი შემოწმების დროს, მე მქონდა გადაცემის პრობლემები. თავიდან მონაცემები სწრაფად გაცვალეს, შემდეგ გარკვეული პერიოდის შემდეგ სიჩქარე მკვეთრად დაეცა. მე დავასკვენი, რომ ეს იყო TCP მიდგომის ტიპიური პრობლემა (რაც არასწორი იყო!), ამიტომ შემდეგ გადავიყვანე UDP– ზე დაფუძნებულ გადაწყვეტაზე. ბოლოს ორივე მივუახლოვდი მუშაობას. ასე რომ, ორივე გამოსავალი იქნება.

ქვემოთ მოცემულ ესკიზებს აქვთ საერთო TCP და UDP ნიშნები:

  • დამოუკიდებელია ნებისმიერი არსებული WiFi ქსელისგან. ასე რომ, ის იმუშავებს ყველგან შორს ინტერნეტიდან და დაკავშირებული მარშრუტიზატორებიდან.
  • აგზავნიან ASCII მონაცემებს სერიული მონიტორის საშუალებით დასაბეჭდად.
  • აგზავნიან მონაცემებს მიღებული millis () ფუნქციით, გადაცემის სიჩქარის გასაანალიზებლად.
  • არ არის ტესტირებული მრავალ კლიენტზე (ქსელის შექმნის აპარატურის გამო)

ნაბიჯი 2: აპარატურა

ტექნიკა
ტექნიკა
ტექნიკა
ტექნიკა
ტექნიკა
ტექნიკა
ტექნიკა
ტექნიკა

მთელი კონფიგურაციის შესამოწმებლად გამოვიყენე ორი ESP8266 მოდული. ერთი მოდული არის ESP-01 + USB-to-UART ადაპტერი. სხვა მოდული არის ESP-12 დაფუძნებული მოდული, რომელიც მოიცავს USB კავშირს, ძაბვის რეგულატორს და რამდენიმე სახალისო ნივთს, როგორიცაა კონცენტრატორები, LDR და მრავალ ფერადი LED.

ESP-01– ის USB-to-UART მოდული საჭიროებდა ოდნავ შეცვლას, რათა შეძლებოდა პროგრამისტად გამოყენებას (ისევ Ysube by Csongor Varga).

ესკიზების გასაშვებად, თქვენ უნდა დააინსტალიროთ ESP8266 ბიბლიოთეკები (როგორც ეს აღწერილია ინტერნეტის ბევრ ადგილას). ორივე შემთხვევაში (TCP და UDP) არის თითოეული სერვერისა და კლიენტის ესკიზი. რომელი ესკიზი რომელ მოდულში იტვირთება არ აქვს მნიშვნელობა.

მადლობები

როგორც აღვნიშნეთ, ესკიზები დაფუძნებულია ბევრ ნაჭერზე, რომელიც ვიპოვე ინტერნეტში. აღარ მახსოვს სად ვიპოვე რა და რა არის ორიგინალური კოდი ან რა შევცვალე. ასე რომ, მე მინდოდა მადლობა გადაეხადა ზოგადად დიდ საზოგადოებისთვის, რომ გამოქვეყნებულიყო ყველა შესანიშნავი მაგალითი.

ნაბიჯი 3: ესკიზები

კოდი შედგება ორი ესკიზისგან (ახსნილია), სერვერის ესკიზი და კლიენტის ესკიზი, თითოეული TCP და UDP- ისთვის.

გირჩევთ: