Спасибо, что посмотрели ребята. Я только начинаю работу с проектами беспроводных датчиков 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