物联网方案之“Arduino+以太网盾板+Node-RED”(一)

最近学习了《用于物联网的Arduino项目开发实用案例解析》,配置了Arduino NUO和以太网盾板,在《Arduino程序设计指南》的帮助下成功实现了将Arduino采集的传感器数据通过HTTP GET的方法发送给了本局域网架设的node-red服务器以及https://goiot.cc网站架设的node-red服务器上,数据经服务器处理后成功返还给Arduino并在Serial串口终端进行了显示。现将步骤详细记录备查。

一、架设Arduino NUO和以太网盾板,编写网络连接程序

物联网方案之“Arduino+以太网盾板+Node-RED”(一)_第1张图片物联网方案之“Arduino+以太网盾板+Node-RED”(一)_第2张图片

#include 
#include 

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress staticIP(192,168,1,123);

EthernetClient client;

int lightValue;
//server既可以是ip地址,也可以是URL,不要带http://
//char server[]={"106.15.48.18"};
char server[]={"cumtzd-light_sensor.goiot.cc"};
int port =80;
unsigned long lastConnectionTime =0;
const unsigned long postingInterval =10L *1000L;

//读传感器数值
void readSensorData()
{
  lightValue=analogRead(A0);
  Serial.print("[INFO] Light Sensor Reading: ");
  Serial.println(lightValue);
}

//以GET方法进行HTTP连接
void doHttpGet()
{
  //读取从服务器传来的数据,如果有的话
  while(client.available())
  {
    char c=client.read();
    Serial.write(c);
   }
  Serial.println("");
  Serial.println("-------------------------");
  if(millis()-lastConnectionTime > postingInterval)
  {
    client.stop();
    readSensorData();
    String requestData ="requestVar="+String(lightValue);
    Serial.println("[INFO] Connecting to Server");

    //检查server.port的连接是否已经建立
    if(client.connect(server,port))
    {
      Serial.println("[INFO] Server Connected -HTTP GET Started");

      //做HTTP GET 请求,千万注意GET后面和HTTP前面的空格
      client.println("GET /lightSensorTweet?" + requestData + " HTTP/1.0");
      client.println("Host:" + String(server));
      client.println("Connection:close");
      client.println();

      lastConnectionTime=millis();
      Serial.println("[INFO] HTTP GET Completed");
      }
      else
      {
        Serial.println("[INFO] Connection failed");
        }
    } 
}

void setup() 
{
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial.println("[INFO] Start to found an IP:");
  if (Ethernet.begin(mac))
  {
    Serial.print("[INFO] Found a valid IP address:");
    Serial.println(Ethernet.localIP());
  }else{
    Ethernet.begin(mac,staticIP);
    Serial.print("[INFO] To special Server a static IP:");
    Serial.println(Ethernet.localIP());    
  }  
}

void loop()
{
  doHttpGet();
  delay(5000);
}

二、安装Node-RED服务器

物联网方案之“Arduino+以太网盾板+Node-RED”(一)_第3张图片

物联网方案之“Arduino+以太网盾板+Node-RED”(一)_第4张图片

依上图就能安装ok,然后在cmd中ipconfig查看本机的ip地址,如192.168.1.101,则node-red服务器在该路由器下局域网的服务器地址就是192.168.1.101:1880,将Arduino架设在局域网内是可以将GET方法发送到该服务器上的。

三、使用https://goiot.cc网站架设的node-red服务器

物联网方案之“Arduino+以太网盾板+Node-RED”(一)_第5张图片

我注册了cumtzd,pass:cu……52,新建了一个app,添加了http接受节点-->类型转换函数-->分支判断节点-->消息组装函数-->http输出节点

物联网方案之“Arduino+以太网盾板+Node-RED”(一)_第6张图片

物联网方案之“Arduino+以太网盾板+Node-RED”(一)_第7张图片物联网方案之“Arduino+以太网盾板+Node-RED”(一)_第8张图片物联网方案之“Arduino+以太网盾板+Node-RED”(一)_第9张图片物联网方案之“Arduino+以太网盾板+Node-RED”(一)_第10张图片

物联网方案之“Arduino+以太网盾板+Node-RED”(一)_第11张图片物联网方案之“Arduino+以太网盾板+Node-RED”(一)_第12张图片

之后点击deploy部署,可以查看服务器地址为http://cumtzd-light_sensor.goiot.cc/,可以自己组装个get方法在浏览器中访问测试一下 ,http://cumtzd-light_sensor.goiot.cc/lightSensorTweet?requestVar=863

物联网方案之“Arduino+以太网盾板+Node-RED”(一)_第13张图片

可以看出服务器配置是ok的。

四、运行效果

Arduino 上电运行后首先接入以太网,办公室路由器可以直接动态分配ip,家里的只能静态分配,可能是路由器哪里设置的问题。

连接入以太网后,读取模拟端口数据,以get格式向node-red服务器发送HTTP请求,这是如果node-red服务器还没有deploy的话是不行的。

物联网方案之“Arduino+以太网盾板+Node-RED”(一)_第14张图片

物联网方案之“Arduino+以太网盾板+Node-RED”(一)_第15张图片物联网方案之“Arduino+以太网盾板+Node-RED”(一)_第16张图片

注意:当以太网盾板插入了SD卡后,盾板连网将出现ip=255.255.255.255的问题,动态、静态都不行

你可能感兴趣的:(物联网方案之“Arduino+以太网盾板+Node-RED”(一))