2

見てくれてどうもありがとう。Arduinoワイヤレスセンサープロジェクトを始めたばかりで、手がかりの壁にぶつかりました。私のプロジェクトのトラブルシューティングについての洞察や助けをいただければ幸いです。

私は Arduino Mega を使用しており、Wifi Shield を使用して 4 つのチャネル (すべてフロート) を Xively フィードにアップロードしようとしています。基本的なチュートリアル スクリプト (下部のコード) を変更した形式を使用しています。確認し、正常にアップロードしました。ボードを実行すると、最初のデバッグ情報は良好に見えます。Xively クライアント ライブラリを使用して put または get を実行しようとすると、エラーが発生します (ret = -1、利用可能なソケットがなく、get で http エラーが発生します)。エラーのシリアルログも下部に添付しました。

すでにいくつかのトラブルシューティング手順を実行しました。すべてのxilyライブラリとWifiライブラリを再ダウンロードしました。DNSサーバー(8.8.8.8)を手動で設定すると役立つと思いました。DNS機能を取得するために、arduinoライブラリ全体をインポートしました(必要ではないと思いますが)。違いはないようだったので、トラブルシューティングのパンくずリストとして残しました. また、トラブルシューティングの手順として、プルはできるがプッシュはできないかどうかを確認するために、Xively client.get を追加しました。これにより、HTTP エラーが発生しました。また、プロジェクトにパブリック ワイド オープン API キーを追加し、(プライベート キーの代わりに) それを試しました。まだ喜びはありません。

Wi-Fi に正常に接続しているように感じますが、どのサービスにも実際に接続できません。私が見逃した非常に明白なステップがあることを望んでいました。再び正しい軌道に乗るために役立つ手がかりを本当に使用することができました. ありがとう!

マイカ・ウィン

#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);
}

 
    ------------------------------エラーログ出力------------------ ------------------------
    ホット タブ モニターのデバッグ ストリームを開始しています
    -----------------------------------
    WPA SSID に接続しようとしています: LionsGate
    ネットワークに接続しています
    3
    IP アドレス: 192.168.1.137
    192.168.1.137
    信号強度 (RSSI):-27
    RSSI を Xily に送信: -27
    Xily への送信温度: 227.32
    Ph を Xily に送信: 6.98
    ザイブリーにORPを送る:0.49
    Xilyにアップロードする
    xivelyclient.put は -1 を返しました
    HTTP エラー
    RSSI を Xily に送信: -27
    Xily への送信温度: 154.33
    Ph を Xily に送信: 6.94
    XilyにORPを送る:0.87
    Xilyにアップロードする
    xivelyclient.put は -1 を返しました
    HTTP エラー
    RSSI を Xily に送信: -27
    Xilyへの送信温度: 147.25
    Ph を Xily に送信: 6.94
    XilyにORPを送る:0.83
    Xilyにアップロードする
    利用できるソケットがありません
    xivelyclient.put は -1 を返しました
    利用できるソケットがありません
    HTTP エラー
    RSSI を Xily に送信: -27
    Xily への一時的な送信: 149.91
    Ph を Xily に送信: 6.94
    XilyにORPを送る:0.87
    Xilyにアップロードする
    利用できるソケットがありません
    xivelyclient.put は -1 を返しました
    利用できるソケットがありません
    HTTP エラー

4

1 に答える 1