Arduino是被广泛使用的电子原型平台,包含硬件(各种型号的开发板)与软件(Arduino IDE),Arduino实现环境感知功能依赖于各种传感器(温湿度传感器、空气质量传感器等),通过传感器的数据感知,Arduino可通过灯光,转子等装置来对环境做出反馈或改变。
Modbus是工业电子设备间通信的业界标准,可通过串口、以太网以及其他支持互联网协议的网络进行通信。
ModbusTCP是利用以太网TCP/IP实现的Modbus通信协议,我们可以使用带网络扩展板的Arduino开发板来制作Modbus从机。通过Modbus协议的通讯指令,我们向Arduino中的寄存器发送写指令,通过改变寄存器的状态实现灯光的控制。
接下来我们开始组装Arduino,使用到的零件如下:
序 | 零件名称 | 数量 |
---|---|---|
1 | Arduino UNO R3 开发板 | 1 |
2 | Arduino Ethernet W5100 网络扩展板 | 1 |
3 | USB数据线 | 1 |
4 | 网线 | 1 |
5 | 面包板 | 1 |
6 | 杜邦线 | 若干 |
7 | LED灯 | 1 |
8 | 220欧姆电阻 | 1 |
Arduino开发板与Ethernet W5100网络扩展板组装完成后的外观如下图所示。
我们设计的程序的流程如下:
使用Arduino IDE 编译并上传以下Arduino程序。
// 采用 MyArduinoProjects Modbus TCP 链接库
// http://myarduinoprojects.com/modbus.html
#include <SPI.h>
#include <Ethernet.h>
#include "MgsModbus.h" //引入Modbus TCP 链接库
MgsModbus Mb;
// 设置网络 (网络扩充卡 MAC 可自行修改 +1 避免冲突)
byte mac[] = {0x90, 0xA2, 0xDA, 0x0E, 0x94, 0xB6 }; //设置Arduino设备的网卡MAC地址
IPAddress ip(192, 168, 1, 162); //设置Arduino设备的网络IP地址
IPAddress gateway(192, 168, 1, 1); //设置网关的IP地址
IPAddress subnet(255, 255, 255, 0); //设置子网掩码
#define LED_PIN 8 //定义LED PIN为8
int LedSwitch=0;
void setup() {
Serial.begin(9600);
Ethernet.begin(mac, ip, gateway, subnet); // 启动网络
Serial.println("网络已经开通");
//设置要使用的缓存器地址
//0 1 2 3 4 是 Holding 缓存器的顺序,其地址分别是10000,10001,10002,10003,10004
// 新增缓存器 mb.MbData(i);
Mb.MbData[0] = 0; // 0=关闭LED灯 1=打开LED灯
pinMode(LED_PIN, OUTPUT); // 设定脚位 PIN 8为输出模式
}
void loop() {
LedSwitch=Mb.MbData[0]; // 读取数字缓存器的数值
if (LedSwitch!=0){
digitalWrite(LED_PIN, HIGH); //PIN 8输出为HIGH,LED点亮
}
else {
digitalWrite(LED_PIN, LOW); //PIN 8输出为LOW,LED熄灭
}
delay(500); //延时 0.5秒
Mb.MbsRun(); //呼叫 Modbus
}
上述设计完成后,我们使用FastWeb网页开发平台快速设计界面。
点击右侧的开关图像,开关打开,上方的灯泡切换为亮灯的状态,同时连接Arduino开发板的LED发光二极管处于点亮的状态;在亮灯状态下,点击右侧的开关图像,开关关闭,上方的灯泡切换为灯灭的状态,同时连接Arduino开发板的LED发光二极管处于关闭的状态。