Soru:
Sunucu veritabanımdan Arduino'mdaki bir değişkene veri nasıl alınır?
Manihatty
2014-05-06 12:23:53 UTC
view on stackexchange narkive permalink

İstemci - sunucu iletişimiyle çalışmayı öğreniyorum. Sunucumla iletişim kurabiliyorum ve değerleri tabloda saklayabiliyorum. Ancak veritabanından belirli verilerden birini almak istiyorum.

Burada Arduino'mdaki bir değişkende saklamak için 'Current' sütunundan 'abc' değerini almak istiyorum.

Şimdiye kadar yaptığım kod aşağıdadır. Sorunu çözebilirseniz çok mutlu olurum.

İşte veritabanı yapım

  ---------------- ----------------------------------- | Cihaz | Önceki | Sonraki | Mesafe | Güncel | -------------------------------------------------- - | katup123 | xyz | abc | 2.600 | abc | -------------------------------------------------- -  

İşte PHP kodum:

locator.php

  <? php $ con = mysqli_connect ("alan_adiniz.com.tr "," peter "," abc123 "," locate "); // Bağlantıyı kontrol etif (mysqli_connect_errno ()) {echo" MySQL'e bağlanılamadı: ". mysqli_connect_error ();} $ sonuç = mysqli_query ($ con, "SELECT Current FROM locate WHERE Device = 'katup123'"); while ($ row = mysqli_fetch_array ($ sonuç)) {echo $ row ['Current']; echo "<br>"; }? > 

İşte benim Arduino kodum:

  // GSM kitaplığını dahil et # include <GSM.h> # define PINNUMBER "" // APN verileri #define GPRS_APN "GPRS_APN" // GPRS APNgpsll'nizi değiştirin # define GPRS_LOGIN "giriş" // GPRS giriş bilgilerinizle değiştirin # define GPRS_PASSWORD "şifre" // GPRS şifrenizle değiştirin // kütüphane örneğini başlatınGSM gsmAccess; GSMClient istemcisi; GPRS gprs; // URL, yol & bağlantı noktası (örneğin: arduino.cc) char server [] = "alan_adiniz.com"; karakter yolu [] = "/locater.php";int bağlantı noktası = 80; // HTTPvoid ​​setup () için varsayılan port 80'dir {Serial.begin (9600); Serial.println ("Arduino web istemcisinin başlatılması."); // bağlantı durumu boole notConnected = true; // GSM kalkanı başlat
// SIM'inizin PIN'i varsa, bunu tırnak işaretleri içinde bir begin () parametresi olarak iletin (bağlı değil) {if ((gsmAccess.begin (PINNUMBER) == GSM_READY) & (gprs.attachGPRS (GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD) = = GPRS_READY)) notConnected = yanlış; else {Serial.println ("Bağlı değil"); gecikme (1000); }} Serial.println ("GSM başlatıldı"); Serial.println ("bağlanıyor ...");} void döngü () {karakter sonuç [20]; Serial.print ("Sunucu Veritabanına Bağlanma"); eğer (client.connect (sunucu, bağlantı noktası)) {client.print ("GET /locator.php?"); Serial.print ("GET /locator.php?"); client.println ("HTTP / 1.1"); Serial.println ("HTTP / 1.1"); client.println ("Ana Bilgisayar: www.alan_adiniz.com"); Serial.println ("Ana Bilgisayar: www.alan_adiniz.com"); client.println ("Kullanıcı-Aracı: Arduino"); Serial.println ("Kullanıcı-Aracı: Arduino"); client.println ("Kabul Et: metin / html"); Serial.println ("Kabul Et: metin / html"); client.println ("Bağlantı: kapat"); Serial.println ("Bağlantı: kapat"); client.println (); Serial.println (); Serial.println ("\ nKOMPLE! \ N"); client.stop (); } else {Serial.println ("bağlantı başarısız oldu"); Serial.println ("\ n BAŞARISIZ! \ N"); } delay (5000);}  

Burada 'abc' değerini 'sonuç' değişkenime kaydetmek istiyorum. Nasıl yapacağımı bilmiyorum.

Bir web sunucusundan arduino'ya veri almak için, sadece sayfada yazan değerle bir hph veya html sayfası yapın. Bu şekilde, sayfayı isteyerek web sunucusundan değeri alabilir ve ardından kodunuzdaki değeri kullanabilirsiniz. Göndermeyi zaten yaptığınız için, değeri DB'den yazan başka bir sayfa yapın.
Iki yanıtlar:
Mazaryk
2017-04-21 04:29:37 UTC
view on stackexchange narkive permalink

GET isteğini gönderdikten sonra, belirttiğiniz char result [20] değişkenini doldurmak için yanıtı okursunuz:

  int i = 0; .. .if (client.connect (sunucu, bağlantı noktası)) {client.print ("GET /locator.php?"); ... Serial.println ("\ nCOMPLETE! \ N"); // i = 0 sunucusundan gelen yanıtı oku; while (client.available ()) {sonuç [i] = client.read (); Serial.print (sonuç [i]); i ++; } client.stop (); // disconnect}  

Bu bir örnektir, sonuç locator.php tarafından çıkarılan metni içerir. Vakanıza uygulamak için bu kodu değiştirmeniz gerekecek. Yukarıdaki kodda herhangi bir hata denetimi yoktur. Ayrıca, bir kontrol yapmalı ve yalnızca bir kez web araması yapmalısınız.

locator.php'de echo "<br / >"; 'i echo "\ n"; ile değiştirmelisiniz. İyi bir önlem için <? 'den önce beyaz boşluk olmadığından emin olun ve sondaki ? > ' i kaldırın.

chicks
2014-11-17 23:53:51 UTC
view on stackexchange narkive permalink

Arduino'nuzu tcp / ip üzerindeyseniz, cevabınız O'Reilly'nin Arduino Yemek Kitabında bulunabilir: Tarif 15-4. Sourcery'nin belirttiği gibi, PHP tarafında sadece aradığınız verileri tüküren yeni bir sayfa oluşturmanız ve ardından bu verileri indirmek için Arduino tarafında bir web istemcisi kullanmanız gerekir.

Ağda Arduino'nuz yoksa, verileri seri hat üzerinden yapıştırmanız gerekir. Bunun bir yolu, onu kaynağınızda pişirmek ve Arduino'yu yeniden derlemek / yeniden yazmaktır. Daha küçük bir çekiç, Arduino taslağınıza verileri USB seri yoluyla almakla başa çıkabilecek ve PHP'den verileri çekip Arduino'ya göndermek için bilgisayar tarafında bir şim bulunan bir şey oluşturmak olacaktır. Arduino ve Processing ile seri iletişim, Arduino'ya veri aktaran bilgisayarda Processing'i çalıştırdığı yerde benzer bir şeyi gösteriyor.

ilk bağlantı yalnızca yetkili kullanıcılar içindir ve ikincisi 404'tür.
İkinci URL'yi düzelttim.


Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...