非常感謝您找人。我剛剛開始使用Arduino無線傳感器項目,並且遇到了線索牆。我會很感激任何見解或幫助解決我的項目。無法連接到Xively使用Arduino + WiFi盾牌,「ret = -1沒有套接字可用」
我正在使用Arduino Mega,Wifi Shield試圖將4個通道(全部浮動)上傳到我的Xively feed。我正在使用基本教程腳本的修改形式(底部的代碼)。我驗證併成功上傳。當我運行電路板時,最初的調試信息看起來不錯。當我嘗試使用Xively客戶端庫執行put或get操作時,出現錯誤(ret = -1,沒有可用的套接字,並且獲取http錯誤)。我在底部附上了一個錯誤的連續日誌。
我已經採取了一些故障排除步驟。我重新下載了所有的xively庫和Wifi庫以確保。我以爲手動設置DNS服務器(8.8.8.8)可能會有所幫助。我甚至導入了整個arduino庫(儘管我認爲它不應該被需要)來獲得DNS功能。它似乎沒有什麼區別,所以我把它作爲一個排除故障的麪包屑。同樣作爲故障排除步驟,我添加了一個Xively client.get,以查看我是否可以取消但不推送。這產生了一個HTTP錯誤。我還爲我的項目添加了一個公開的開放API密鑰,並嘗試(而不是私有密鑰)。仍然沒有快樂。
雖然我成功地連接到我的wifi,但它不能與任何服務建立真正的連接,這種感覺就像是一種感覺。我希望有一些超級明顯的步驟,我錯過了。我真的可以用一條有用的線索讓我再次走上正軌。謝謝!
彌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