2013-06-27 3 views
2

Спасибо, что посмотрели ребята. Я только начинаю работу с проектами беспроводных датчиков Arduino, и я ударил по стене. Я был бы признателен за понимание или помощь в устранении неполадок моего проекта.Невозможно подключиться к Xively с помощью щита Arduino + wifi, «ret = -1 Нет гнезд в наличии»

Я использую Arduino Mega с Wifi Shield, чтобы попытаться загрузить 4 канала (все поплавки) в мою ленту Xively. Я использую модифицированную форму основного учебного скрипта (код внизу). Я проверяю и загружаю успешно. Когда я запускаю плату, начальная информация об отладке выглядит хорошо. Когда я пытаюсь сделать либо put, либо get, используя клиентскую библиотеку Xively, я получаю сообщение об ошибке (ret = -1, отсутствие сокетов и HTTP-ошибка при получении). Я также привязал серийный журнал ошибок в нижней части.

Я уже предпринял некоторые шаги по устранению неполадок. Я перезагрузил все библиотеки xively и библиотеки Wifi, чтобы быть уверенными. Я думал, что ручная настройка DNS-сервера (8.8.8.8) может помочь. Я даже импортировал всю библиотеку arduino (хотя я не думаю, что это необходимо), чтобы получить функциональность DNS. Кажется, это не изменило ситуацию, поэтому я оставил ее в качестве инструмента для устранения неполадок. Также в качестве этапа устранения неполадок я добавил Xively client.get, чтобы узнать, могу ли я потянуть, но не нажать. Это вызвало ошибку HTTP. Я также добавил общедоступный открытый api-ключ к моему проекту и попробовал это (вместо частного). Еще нет радости.

Это похоже на то, что я успешно подключаюсь к своему Wi-Fi, но не могу подключиться к каким-либо услугам. Я надеялся, что есть какой-то супер очевидный шаг, который я пропустил. Я мог бы использовать полезную подсказку, чтобы снова найти меня на правильном пути. благодаря!

Михей Wyenn

#include <Dhcp.h> 
#include <Dns.h> 
#include <Ethernet.h> 
#include <EthernetClient.h> 
#include <EthernetServer.h> 
#include <EthernetUdp.h> 
#include <util.h> 

/* 
    Hot Tub Monitor 
     --- If you are only calibrating your sensor, use the calibrate sensor script. This is for submerged operation. 
    This script will allow you to test to ensure the temp, Ph, and ORD sensors are operating and are calibrated correctly.---- 

    This script was written for the MEGA 2560 with the wireless shield, connecting in to Xively's cloud graph service 

    The Mega 2560 with the Wireless shield and Probes uses the following pins: 
    * SPI bus interface 
    * Onboard MicroSD card reader (uses SD Lib) on digital pin 4 
    * Digital Pins 7, 50, 51, 52, and 53 are reserved and shouldn't be used 
    * Digital Pin 18 is set to OUTPUT to power the temp probe on/off 
    * Atlas Scientific Temp Sensor input on Analog Uno pin A4 
    * Phidgets Ph Sensor input on Analog Uno pin A2 
    * Phidgets ORD Sensor input on Analog Uno pin A0 
*/ 
// Libraries in use 
#include <SPI.h> 
#include <WiFi.h> 
#include <b64.h> 
#include <HttpClient.h> 
#include <CountingStream.h> 
#include <Xively.h> 
#include <XivelyClient.h> 
#include <XivelyDatastream.h> 
#include <XivelyFeed.h> 
#include <WiFiClient.h> 
#include <WiFiServer.h> 
#include <WiFiUdp.h> 

// setting up some of the globals 
const int TEMPPIN = 4; 
const int PHPIN = 1; 
const int ORPPIN = 0; 
boolean isDebugEnabled = true; //setting up the debug state 
int status = WL_IDLE_STATUS; 
char ssid[] = "<security snip>"; // your network SSID (name) 
char pass[] = "<security snip>"; // your network password (use for WPA, or use as key for WEP) 

// My Xively key to let you upload data 
char xivelyKey[] = "<security snip>"; 
// My xively feed ID 
#define xivelyFeed <security snip> 
// My datastreams 
char myWirelessStrStream[] = "MonitorWirelessStrength"; 
char myORPStream[] = "ORP"; 
char myPhStream[] = "Ph"; 
char myTempStream[] = "Temp"; 

// Creating the datastreams 
XivelyDatastream datastreams[] = { 
    XivelyDatastream(myWirelessStrStream, strlen(myWirelessStrStream), DATASTREAM_FLOAT), 
    XivelyDatastream(myORPStream, strlen(myORPStream), DATASTREAM_FLOAT), 
    XivelyDatastream(myPhStream, strlen(myPhStream), DATASTREAM_FLOAT), 
    XivelyDatastream(myTempStream, strlen(myTempStream), DATASTREAM_FLOAT) 
    }; 
XivelyFeed feed(xivelyFeed, datastreams, 4); 

//starting the Xively client 
WiFiClient client; 
XivelyClient xivelyclient(client); 


void setup() { 
    if (isDebugEnabled) { //setting up the debug stream 
    Serial.begin(9600); 
    Serial.println("Hot Tub Monitor Debug Stream Starting"); 
    Serial.println("-----------------------------------"); 
    } 
    pinMode(12,OUTPUT); //this pin turns on the temp sensor - battery saver to have this on/off switchable 

    // connect to the wifi 
    // check for presence of the shield 
    if (WiFi.status() == WL_NO_SHIELD) { 
    Serial.println("WiFi shield not present"); 
    // don't continue: 
    while(true); 
    } 

    //Connect to the wifi network 
    while (status != WL_CONNECTED) { 
     Serial.print("Attempting to connect to WPA SSID: "); 
     Serial.println(ssid); 
     // Connect to WPA/WPA2 network:  
     status = WiFi.begin(ssid, pass); 

     // wait 10 seconds for connection: 
     delay(10000); 
    } 
    Serial.println("You're connected to the network"); 
    Serial.println(status); 
    //printCurrentNet(); 
    printWifiData(); 

    // print the received signal strength: 
    long rssi = WiFi.RSSI(); 
    Serial.print("signal strength (RSSI):"); 
    Serial.println(rssi); 

} 

void loop() { 
// report on the WiFi Signal strength 
    long rssi = WiFi.RSSI(); 
    if (isDebugEnabled) { //send the signal str to Xively 
    Serial.print("Sending RSSI to Xively: "); 
    Serial.println(rssi); 
    } 
    // print the received signal strength: 
    datastreams[0].setFloat(rssi); 

// get the temp from our Atlas Sci probe 
    float tempC=get_temp(); 
    float tempF = (tempC*1.8)+32; 
    datastreams[1].setFloat(tempF); 

// debugging info for temp 
    if (isDebugEnabled) { //send the temp to Xively 
    Serial.print("Sending Temp to Xively: "); 
    Serial.println(tempF); 
    } 

// get the Ph from our phidget's monitor 
    float Ph=get_Ph(tempC); 
    datastreams[2].setFloat(Ph); 

// debugging info for Ph 
    if (isDebugEnabled) { //send the Ph to Xively 
    Serial.print("Sending Ph to Xively: "); 
    Serial.println(Ph); 
    } 

// get the Ph from our phidget's monitor 
    float ORP=get_ORP(); 
    datastreams[3].setFloat(ORP); 

// debugging info for Ph 
    if (isDebugEnabled) { //send the Ph to Xively 
    Serial.print("Sending ORP to Xively: "); 
    Serial.println(ORP); 
    } 


    Serial.println("Uploading it to Xively"); 
    int ret = xivelyclient.put(feed, xivelyKey); 
    Serial.print("xivelyclient.put returned "); 
    Serial.println(ret); 


    delay(10000); 
} 
float get_Ph(float tempC) { 
    float Ph = analogRead(PHPIN); 
    Ph = 7 -((2.5 - (Ph/200))/((0.257179 + 0.0000941468)*tempC)); // convert to the ph 
    return Ph; 
    } 

float get_ORP() { 
    float ORP = analogRead(ORPPIN); 
    ORP = (2.5 - (ORP/200))/1.037; // convert to proper ORP 
    return ORP; 
    } 

float get_temp(){  
    float v_out; 
    float Temp; 
    digitalWrite(A4, LOW); //wtf is this for? 
    digitalWrite(12, HIGH); 
    delay(2); 
    v_out = analogRead(4); 
    digitalWrite(12, LOW); 
    v_out*=.0048; 
    v_out*=1000; 
    Temp=0.0512 * v_out -20.5128; 
    return Temp; 
} 

void printWifiData() { 
    // print your WiFi shield's IP address: 
    IPAddress ip = WiFi.localIP(); 
    Serial.print("IP Address: "); 
    Serial.println(ip); 
    Serial.println(ip); 
} 

 
    -----------------------------Error Log Output------------------------------------------ 
    Hot Tub Monitor Debug Stream Starting 
    ----------------------------------- 
    Attempting to connect to WPA SSID: LionsGate 
    You're connected to the network 
    3 
    IP Address: 192.168.1.137 
    192.168.1.137 
    signal strength (RSSI):-27 
    Sending RSSI to Xively: -27 
    Sending Temp to Xively: 227.32 
    Sending Ph to Xively: 6.98 
    Sending ORP to Xively: 0.49 
    Uploading it to Xively 
    xivelyclient.put returned -1 
    HTTP Error 
    Sending RSSI to Xively: -27 
    Sending Temp to Xively: 154.33 
    Sending Ph to Xively: 6.94 
    Sending ORP to Xively: 0.87 
    Uploading it to Xively 
    xivelyclient.put returned -1 
    HTTP Error 
    Sending RSSI to Xively: -27 
    Sending Temp to Xively: 147.25 
    Sending Ph to Xively: 6.94 
    Sending ORP to Xively: 0.83 
    Uploading it to Xively 
    No Socket available 
    xivelyclient.put returned -1 
    No Socket available 
    HTTP Error 
    Sending RSSI to Xively: -27 
    Sending Temp to Xively: 149.91 
    Sending Ph to Xively: 6.94 
    Sending ORP to Xively: 0.87 
    Uploading it to Xively 
    No Socket available 
    xivelyclient.put returned -1 
    No Socket available 
    HTTP Error 

ответ

1

Благодарим за предоставленную столько фона на ваш вопрос, он сделал это легко проверить и выяснить, что ваш вопрос. Пока вы подключаетесь к вашему Wi-Fi нормально, похоже, что ваш код должен быть хорошим, за исключением всего импорта. Все, что я сделал, это удалить лишний импорт, который у вас был в начале. Что касается настройки вашего собственного DNS-сервера, вы можете это сделать, но это может быть причиной ваших проблем. Если вы беспокоитесь о DNS, вам лучше настроить IP вручную и не полагаться на DNS.

Ниже приведена моя переработанная версия того, что я скопировал из вашего кода. Надеюсь, он будет работать с вашей сетью и кормить. Я тестировал его на UNO и Mega ADK (только у Mega I) с официальным щитом Wi-Fi Arduino, и он работал над обоими.

// Libraries in use 
#include <SPI.h> 
#include <WiFi.h> 
#include <HttpClient.h> 
#include <Xively.h> 
/* 
    Hot Tub Monitor 
     --- If you are only calibrating your sensor, use the calibrate sensor script. This is for submerged operation. 
    This script will allow you to test to ensure the temp, Ph, and ORD sensors are operating and are calibrated correctly.---- 

    This script was written for the MEGA 2560 with the wireless shield, connecting in to Xively's cloud graph service 

    The Mega 2560 with the Wireless shield and Probes uses the following pins: 
    * SPI bus interface 
    * Onboard MicroSD card reader (uses SD Lib) on digital pin 4 
    * Digital Pins 7, 50, 51, 52, and 53 are reserved and shouldn't be used 
    * Digital Pin 18 is set to OUTPUT to power the temp probe on/off 
    * Atlas Scientific Temp Sensor input on Analog Uno pin A4 
    * Phidgets Ph Sensor input on Analog Uno pin A2 
    * Phidgets ORD Sensor input on Analog Uno pin A0 
*/ 


// setting up some of the globals 
const int TEMPPIN = 4; 
const int PHPIN = 1; 
const int ORPPIN = 0; 
boolean isDebugEnabled = true; //setting up the debug state 
int status = WL_IDLE_STATUS; 
char ssid[] = "LMI-GUEST"; // your network SSID (name) 
char pass[] = "2009LMIGuest!"; // your network password (use for WPA, or use as key for WEP) 

// My Xively key to let you upload data 
char xivelyKey[] = "<snip for security>"; 
// My xively feed ID 
#define xivelyFeed 121601 
// My datastreams 
char myWirelessStrStream[] = "MonitorWirelessStrength"; 
char myORPStream[] = "ORP"; 
char myPhStream[] = "Ph"; 
char myTempStream[] = "Temp"; 

// Creating the datastreams 
XivelyDatastream datastreams[] = { 
    XivelyDatastream(myWirelessStrStream, strlen(myWirelessStrStream), DATASTREAM_FLOAT), 
    XivelyDatastream(myORPStream, strlen(myORPStream), DATASTREAM_FLOAT), 
    XivelyDatastream(myPhStream, strlen(myPhStream), DATASTREAM_FLOAT), 
    XivelyDatastream(myTempStream, strlen(myTempStream), DATASTREAM_FLOAT) 
    }; 
XivelyFeed feed(xivelyFeed, datastreams, 4); 

//starting the Xively client 
WiFiClient client; 
XivelyClient xivelyclient(client); 


void setup() { 
    if (isDebugEnabled) { //setting up the debug stream 
    Serial.begin(9600); 
    Serial.println("Hot Tub Monitor Debug Stream Starting"); 
    Serial.println("-----------------------------------"); 
    } 
    pinMode(12,OUTPUT); //this pin turns on the temp sensor - battery saver to have this on/off switchable 

    // connect to the wifi 
    // check for presence of the shield 
    if (WiFi.status() == WL_NO_SHIELD) { 
    Serial.println("WiFi shield not present"); 
    // don't continue: 
    while(true); 
    } 

    //Connect to the wifi network 
    while (status != WL_CONNECTED) { 
     Serial.print("Attempting to connect to WPA SSID: "); 
     Serial.println(ssid); 
     // Connect to WPA/WPA2 network:  
     status = WiFi.begin(ssid, pass); 

     // wait 10 seconds for connection: 
     delay(10000); 
    } 
    Serial.println("You're connected to the network"); 
    Serial.println(status); 
    //printCurrentNet(); 
    printWifiData(); 

    // print the received signal strength: 
    long rssi = WiFi.RSSI(); 
    Serial.print("signal strength (RSSI):"); 
    Serial.println(rssi); 

} 

void loop() { 
// report on the WiFi Signal strength 
    long rssi = WiFi.RSSI(); 
    if (isDebugEnabled) { //send the signal str to Xively 
    Serial.print("Sending RSSI to Xively: "); 
    Serial.println(rssi); 
    } 
    // print the received signal strength: 
    datastreams[0].setFloat(rssi); 

// get the temp from our Atlas Sci probe 
    float tempC=get_temp(); 
    float tempF = (tempC*1.8)+32; 
    datastreams[1].setFloat(tempF); 

// debugging info for temp 
    if (isDebugEnabled) { //send the temp to Xively 
    Serial.print("Sending Temp to Xively: "); 
    Serial.println(tempF); 
    } 

// get the Ph from our phidget's monitor 
    float Ph=get_Ph(tempC); 
    datastreams[2].setFloat(Ph); 

// debugging info for Ph 
    if (isDebugEnabled) { //send the Ph to Xively 
    Serial.print("Sending Ph to Xively: "); 
    Serial.println(Ph); 
    } 

// get the Ph from our phidget's monitor 
    float ORP=get_ORP(); 
    datastreams[3].setFloat(ORP); 

// debugging info for Ph 
    if (isDebugEnabled) { //send the Ph to Xively 
    Serial.print("Sending ORP to Xively: "); 
    Serial.println(ORP); 
    } 


    Serial.println("Uploading it to Xively"); 
    int ret = xivelyclient.put(feed, xivelyKey); 
    Serial.print("xivelyclient.put returned "); 
    Serial.println(ret); 


    delay(10000); 
} 
float get_Ph(float tempC) { 
    float Ph = analogRead(PHPIN); 
    Ph = 7 -((2.5 - (Ph/200))/((0.257179 + 0.0000941468)*tempC)); // convert to the ph 
    return Ph; 
    } 

float get_ORP() { 
    float ORP = analogRead(ORPPIN); 
    ORP = (2.5 - (ORP/200))/1.037; // convert to proper ORP 
    return ORP; 
    } 

float get_temp(){  
    float v_out; 
    float Temp; 
    digitalWrite(A4, LOW); //wtf is this for? 
    digitalWrite(12, HIGH); 
    delay(2); 
    v_out = analogRead(4); 
    digitalWrite(12, LOW); 
    v_out*=.0048; 
    v_out*=1000; 
    Temp=0.0512 * v_out -20.5128; 
    return Temp; 
} 

void printWifiData() { 
    // print your WiFi shield's IP address: 
    IPAddress ip = WiFi.localIP(); 
    Serial.print("IP Address: "); 
    Serial.println(ip); 
    Serial.println(ip); 
} 

Надеюсь, это поможет.

Смежные вопросы