Telefonda uzun boylu … Arduino ile

semaver

New member


  1. Telefonda uzun boylu … Arduino ile

Şimdiye kadar, bu seride sensörler ve aktüatörlerle elektronik tabanlar ve devreler tartışılmıştır. Kullanılan mikrodenetleyici sekmesi, adanın sadece bir varlığını yaşadı ve en fazla USB aracılığıyla ana bilgisayara bağlıydı. Bu katkı bu kısıtlamaya neden olur. Bu ve sonraki bölümlerde seri, Arduino kartları için çeşitli iletişim seçeneği ile ilgileniyor.



Nesnelerin İnterneti iletişim anlamına gelir: cihazlar arasındaki iletişim, cihazlar ve bulut hizmetleri arasındaki iletişim ve cihazlar ve insan arasındaki etkileşim. Ancak mikrodenetleyicili kişiler, mobil ekipman veya PC nasıl olabilir? Başka bir deyişle, bir Arduino kartı nasıl ev çağrıları veya diğer makinelerle sohbet edebilir?

Bu makalede, Ethernet kalkanları ön plandadır. WiFi ve Bluetooth'un da başka bölümleri var. Ayrıca SQMTT gibi uygulamanın birkaç özel iletişim protokolü ile de ilgileniyoruz. IoT cihazlarımızı internete bağlamak için temel taşını koyduk.

Pratik örneklerle başlamadan önce, otobüs sistemleri dünyasında küçük bir yolculuğa ihtiyaç vardır. Ethernet kalkanları SPI veri yolu aracılığıyla Arduino ile iletişim kurar.

SPI – Seri Periferik Arayüz


Zaten önceki bölümlerde benim gibi otobüs sistemleri var2C ve 1 iplik benimle tanıştım2Örneğin C, bir LCD ekrana, DS18B20 sıcaklık sensörüne ve 1 tel ile iletilen mikrodenetleyici sistemine bağlandı. Ancak pratikle ilgili başka otobüs sistemleri de var.

Çok yaygın bir veri yolu sistemi SPI (seri periferik arayüz) olarak adlandırılır, başlangıçta Motorola'dan gelir ve bir yüksek lisans derecesi (!) Ve köleleri arasındaki senkron dubleks iletişimi sunar. Köleler, örneğin bir SD kart okuyucusu, görüntüler veya iletişim bileşenlerini içerebilir. Bunun için neden yapmadığımızı merak edeceksin2C ABD. Cevap kısa. SPI iletişimi bir i aracılığıyla bundan daha hızlı2B Otobüs.








Bir usta ve üç köle ile tipik SPI konfigürasyonu



Bir usta ve üç köle ile tipik SPI konfigürasyonu


(Resim: wikipedia.org)



Dört Satır



Ancak SPI ayrıntılı olarak nasıl çalışır? SPI'nın karakteristik bir özelliği, protokolün dört satır belirlemesidir:

  • Asenkron iletişim, usta ve köle ile farklı saatlere sahip olabilirler. SPI senkron protokolünde ise, ana saati SCLK çıkışından (seri saat) belirtir.
  • Bireysel SS (Slave Select) satırlarını, işbirliği yapmak istediği köle ile.
  • Üstat köleleriyle Mosi (ana çıktı, köle girişi) üzerindeki konuşur.
  • Bir köle, Miso'daki ustasıyla konuşabilir (ana girdi, köle çıkışı). Slave Miso çıkışları üç durum çıkışı olarak tasarlanmıştır, bu nedenle MISO sinyalinin SS'nin bir sinyali olmadığı anda yüksek bir empedansa sahiptir



wikipedia.org



Master ve Slave'in Shif -Trainer'ın yardımıyla iletişimi


(Resim: wikipedia.org)



Kısa süreç


Her iletişimin başında, ana saati, köle bu frekansla çalışabilecek şekilde yapılandırır. Daha sonra ana, düşük bir sinyal yoluyla istenen cihazı seçer. Bir bekleme süresi gerekiyorsa, öğretmen iletişime başlamadan önce verilen zamanı bekler.

SPI verileri tam dubleksle iletir. Gönder birimleri bayt veya makinenin kelimeleridir. Üstat, köle verileri kabul ettiği Mosi çıkışına kıyasla bitlere bit gönderir. Aynı zamanda, bit köle Miso üretimini gönderir ve bu da Üstad'ı alır.

Bu çift yönlü iletişim, kullanıcının verileri yalnızca bir yönde taşınsa bile gerçekleşir. Her iletişim ortağı, biri göndermek için, diğeri veri almak için iki adet 8 -Bit değişikliği içerir.

Polarite ve aşamalar SPI


Böylece usta ve köle başarılı bir şekilde iletişim kurabilir, sadece saatin sıklığını değil, aynı zamanda saatin kullanılan polarite (CPOL) ve fazı (CPHA).

Polarite, hangi sinyal değerinin varlıkları temsil ettiğine ve hangilerinin aktif olmayan durumu temsil ettiğine bağlıdır. Aşama, taraf düştüğünde ve tarafın düştüğünde okuduğunuz ve tam tersi.





wikipedia.org



Polarite ve aşamalı zamanlama diyagramı


(Resim: wikipedia.org)



  • Colo = 0 ise, aktif koşul 1 1 ve minimum 0'ın durumudur.
    • Faz 0 => Verileri tarafı artırarak okuyun, taraf düştüğünde yazın.
    • Faz 1 => Verileri okuyun, taraf düştüğünde, taraf yükseldiğinde yazın.
  • Gol = 1 ise, aktif koşul 0 ve minimum 1'in durumudur.
    • Faz 0 => Verileri okuyun Taraf düştüğünde, taraf arttığında yazın.
    • Faz 1 => Artan taraflı verilerin okunması, taraf düştüğünde yazma.
Arduino pin atanması






Arduino.cc



Arduino kartlarında SPI için PIN atamaları


(Resim: Arduino.cc)



Fiyatlar üzerindeki talep, bahsedilen SPI pimlerinin aslında bireysel Arduino kartlarında bulunduğudır. Arduino.cc'deki bir SPI sayfası bu konuda bilgi sağlar. Orada en azından Arduino için meslekleri bulacaksınız. Replicas ve diğer kartlarla, üreticinin belgelerine danışmak gerekir.

Uart nedir


Açıkçası mikrodenetleyici kartlarda seri ve paralel iletişim var.

  • Paralel iletişim hızlıdır, ancak sadece kısa mesafelerde çalışır.
  • Seri iletişim daha uzun mesafelerde çalışır ve çok daha yavaştır.
Her iki varyantı da bir araya getiren bir arayüze ihtiyacımız var.

Evrensel eşzamansız alıcı/verici, verileri seri ve paralel iletişim arasında çevirme görevine sahiptir. Örneğin, ORT vericisinin söktüğü ve alıcıya, bir alıcının baytlardaki bitleri bir araya getirdiği bitler için biraz seri çizgi ile gönderdiği paralel arayüz baytları vardır. En önemli bileşen shifregister ort içerir – gerçekte iki tane vardır. Makalede, Shffregister 74HC595'in nasıl bir bayt aldığını ve gezilerinde nasıl kullanılabilir hale getirdiğini öğrenmiştik. Oartlar arasındaki seri iletişim, başlangıç ve stopbit ile senkronize edilir. Tam dubleks modda veya simplekste yapılabilir.

Bağlı bileşenlerin mantıksal seviyesinden bir UART sorumlu değildir. Bunun yerine, RS-232, RS-422 ve RS-485 gibi standartlar voltaja bağlıdır.

Arduino Ethernet Kalkanı


Mevcut sürümündeki Arduino Ethernet-Shield, Wiznet'in W5100 çipine dayanmaktadır. En önemli performans verileri hızlı bir şekilde listelenir. Modül 100 MBYTE/s'ye kadar veri iletimi sunar, IEEE 802.3/10Base-T'yi destekler, IEEE 802.3U/100Base-Tx 16 kbyte dahili bir tampona sahiptir ve dört adede kadar paralel temel bağlantıya izin verir.

Ethernet Kalkanı'na gitmek için ilgili bir kütüphaneye ihtiyacımız var. IDE Arduino zaten Ethernet adlı ilgili bir kütüphane getirdi.

Sadece bir Ethernet bağlantısı açan küçük bir taslakla başlayalım. Ethernet kalkanında net bir MAC adresine sahip bir çıkartma varsa, bu adresi alt taslakta kullanın. Ancak, bilgi yoksa, bir MAC adresi icat edin. En kolay yol, elbette, MAC adresini değişmemiş eskizde bırakırsanız. Ancak ağınızda aynı MAC adresine sahip bir cihaz olma riski ihmal edilebilir.

Program, DHCP aracılığıyla dinamik bir IP adresi almaya çalışır ve hata durumunda ilgili bilgileri yayar. Statik adreslerle çalışıyorsanız, listede belirtildiği gibi ilerleyin.

///////////////////////////////////////////////////////////////
//
// Arduino-Sketch: Über Shield an Ethernet anmelden
// a) mit statischer Adresse, oder
// b) mit dynamischer Adresse über DHCP
//
///////////////////////////////////////////////////////////////
#include <SPI.h>
#include <Ethernet.h>

///////////////////////////////////////////////////////////////
// Wir benötigen eine MAC-Adresse.
// Sofern das Ethernet Shield keine Adresse
// (meist als aufgeklebter Sticker)
// besitzt, müssen wir unsere eigene erfinden:
///////////////////////////////////////////////////////////////

byte mac[] = {
0x00, 0xCC, 0xBB, 0xAA, 0xDE, 0x02
};

// EthernetClient: API zum Zugriff auf das Ethernet Shield
EthernetClient client;

///////////////////////////////////////////////////////////////
// Der Sketch geht von dynamischen IP-Adressen per DHCP aus.
// Alternativ wäre die Angabe einer statischen Adresse möglich.
// Ersetzen Sie die nachfolgenden Angaben durch die Ihrer
// Systemumgebung:
//
// IPAddress ip(192, 168, 178, 72);
// IPAddress dns(192,168,178, 1);
// IPAddress gateway(192, 168, 178, 1);
// IPAddress subnet(255, 255, 0, 0);
// Ethernet.begin(mac, ip, dns, gateway, subnet);
//
// Ersetzen Sie ggf.in der Methode setup()
// das if-Statement durch
//
// if (Ethernet.begin(mac) == 0) {
// Ethernet.begin(mac, ip, dns, gateway, subnet);
// }
//
///////////////////////////////////////////////////////////////

void setup() {
Serial.begin(9600); // Serielle Verbindung öffnen

// Ethernet-Verbindung öffnen und DHCP um IP-Adresse bitten:
if (Ethernet.begin(mac) == 0) {
Serial.println("IP-Adressanfrage über DHCP fehlgeschlagen");

while (true) {} // Unendliche Warteschleife
}

// Adresse über seriellen Port ausgeben:
Serial.print("Meine IP Adresse lautet: ");
Serial.println(Ethernet.localIP());
}

void loop() {
//////////////////////////////////////////////////////////////
// IP-Adressen werden von DHCP nur bis zu einer
// "Haltbarkeitsfrist" vergeben. Daher ist nach
// einer bestimmten Zeit ein Neuabonnement nötig:
//////////////////////////////////////////////////////////////

switch (Ethernet.maintain())
{
case 1:
Serial.println("Fehler: Adresserneuerung abgelehnt");
break;
case 2:
Serial.println("Adresserneuerung erfolgreich");
break;
case 3:
Serial.println("Fehler: Rebinding fehlgeschlagen");
break;
case 4:
Serial.println("Rebinding erfolgreich");
break;
default: // Nichts ist passiert
break;
}
}

Arduino web sunucusunu yeniden üretiyor


İnternet üzerinden Arduino ile iletişim kurmak için en kolay iletişim varyantı HTTP'dir. Kullanıcı, Arduino kartının geçerli sensör verilerinden geri bildirimlere tepki verdiği belirli bir web sitesini seçer. Ancak, Arduino bir web sunucusu olarak görünmelidir. Neyse ki, Ethernet Kütüphanesi ile zor değil, bu yüzden tam olarak bu
Uygulamak için.

///////////////////////////////////////////////////////////////
//
// Arduino-Sketch: Über Shield an Ethernet anmelden
// und als Webserver arbeiten.
// Client Nutzung: Browser-Seite http://<serverIP>:80 gehen
//
////////////////////////////////////////////////////////////////
#include <SPI.h> // Serial Peripheral Interface
#include <Ethernet.h> // Ethernet Shield

// Geben Sie hier die MAC-Adresse ihres Ethernet-Shields ein
byte mac[] = {
0xDE, 0xAA, 0xBB, 0xCC, 0xDD, 0xED
};

//////////////////////////////////////////////////////////////
// Nutzung der statischen IP-Adresse. Geben Sie hier
// Ihre eigene statische IP-Adresse ein.
// Alternative wäre dynamische IP-Adresse über DHCP


//////////////////////////////////////////////////////////////
IPAddress serverIP(192, 168, 178, 72);
//////////////////////////////////////////////////////////////
// Der Sketch implementiert einen Server
// mit der serverIP und Port 80:


//////////////////////////////////////////////////////////////
EthernetServer server(80);
void setup() {
// Seriellen Monitor starten
Serial.begin(9600);

// Server mit MAC und IP initialisieren:
Ethernet.begin(mac, serverIP);
server.begin();
Serial.print("Server gestartet. IP Adresse: ");
Serial.println(Ethernet.localIP());
}

//////////////////////////////////////////////////////////////
// Ereignisschleife des Arduino-basierten Webservers


//////////////////////////////////////////////////////////////

void loop() {
// Warten auf einen Client:
EthernetClient client = server.available();
if (client) {
Serial.println("Neue Verbindung");


// Eine leere Zeile markiert das Ende des HTTP Request:
boolean endOfRequestReached = true;


// Solange die Verbindung steht, werden Daten vom Client gelesen:
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// Beim Erreichen des Endes des HTTP Request
// können wir die Antwort zusammenbauen.

if (c == 'n' && endOfRequestReached) {
// Versenden der Antwort:
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");

// Es ist notwendig, die Verbindung zu kappen:
client.println("Connection: close");

// Alle 10 Sekunden soll ein Refresh stattfinden:
client.println("Refresh: 10");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");

// Wir geben einen Zufallswert von A0 zurück:
int val = analogRead(A0);
client.print("Analoger Port A0 ");
client.print("hat den Wert: ");
client.print(val);
client.println("<br />");
client.println("</html>");
}
endOfRequestReached = (c == 'n') || (c == 'r');
}
}

.Arduino'nuzda Aden Sketch, tarayıcıyı açın ve url olarak alttan girin (Serverip Taslak tarafından seri monitör aracılığıyla verilen IP adresidir:

http://serverIP:80

Bu nedenle aşağıdakilere benzer masrafları görmelisiniz:

A0 analog bağlantı noktası: 434 değerine sahiptir
HTTP/1.1 200 OK İçerik Türü: Metin/HTML Bağlantı: Kapat Güncelleme: 10 Amba Yolu A0 değeri: 390
HTTP/1.1 200 OK İçerik Türü: Metin/HTML Bağlantı: Kapat Güncelleme: 10 Amba Yolu A0 değeri: 322
HTTP/1.1 200 Tamam İçerik Türü: Metin/HTML Bağlantı: Kapat Güncelleme: 10 Analog A0 bağlantı noktası: 314
HTTP/1.1 200 OK İçerik Türü: Metin/HTML Bağlantı: Kapat Güncelleme: 10 Amba Yolu A0 değeri: 286
HTTP/1.1 200 OK İçerik Tipi: Metin/HTML Bağlantı: Kapat Güncelleme: 10 Amba Yolu A0 değeri: 395
HTTP/1.1 200 OK İçerik Türü: Metin/HTML Bağlantı: Kapat Güncelleme: 10 Analog A0 bağlantı noktası: 296
HTTP/1.1 200 OK İçerik Türü: Metin/HTML Bağlantı: Kapat Güncelleme: 10 Amba Yolu A0 değeri: 276
HTTP/1.1 200 Tamam İçerik Türü: Metin/HTML Bağlantı: Kapat Güncelleme: 10 Analog A0 bağlantı noktası: 432

Çözüm


Bu bölümde Ethernet-chief'e daha yakından bakmaya başladık. Sistemle ilgili iletişim TCP/IP ve HTTP ile ortaya çıktı. Buna ek olarak, örnekler iletişim 1: 1 ile sınırlıydı. Bu, çok şey almanızı sağlar, ancak uygulama ile ilgili protokoller IoT uygulamaları için bir avantaj olacaktır. Bir sonraki bölüm, kare metre adı verilen ilgili bir örnekle ilgilidir.


()
 
Üst