使用Processing与Arduino通信,玩转上位机。
2016-08-07 21:47
411 查看
Processing与Arduino本来就是自家人。
相信玩Arduino的在电脑上使用Processing充当上位机与下位机通信和控制的角色也是理所当然了。
如何实现P&A通信?
串口(serial)通信:
Cpp 代码,双击复制代码
?
Arduino端:
// 新版Arduino可以智能调节波特率,什么板子都可以上到最高速度。
// 但这只是假象,本意是为了兼容。
// 要根据板子的性能选择波特率,有时候低一点的波特率比如9200、7200传输的信息采样会更密集,平滑。
// 因为处理的带宽是不变的。
Cpp 代码,双击复制代码
?
以太(Ethernet)通讯:
指的就是通过网线、或者wifi来传输数据。它们都是通过套接字(Sockets)来实现的。
主要就是弄懂:
Ip 地址
Port 端口号
服务端、客户端。(他俩差不多可以互逆)
就行。
我这里使用w5500来作为通讯案例(w5500-w5100的板子写法都一样)。
Processing端
import processing.net.*;
int textLine = 60; // 行间距
int port = 10002; // 端口号 每台电脑可以有65536个端口(太牛逼了),1~1023号端口都有其特殊意义,不要随意使用。
Server server; // 新建服务器对象
void setup()
{
size(400, 400);
textFont(createFont("SanSerif", 16));
server = new Server(this, port); // 初始化服务器,服务端的地址就是本机的IP地址啦(this,port)。
// 想要用别的设备访问这个服务器,输入本机IP地址就好。
// 神马,你不知道如何查看自己的地址?
// 反键点击任务栏右下角的网络标识
// 打开网络和共享中心
// 更改适配器设置
// 反键点击本地网络(或无线网络连接)-> 状态
// 你的IPv4 地址 就是啦~
}
byte val = 0; // 传输数据使用的值
String str = "";
void draw()
{
background(0); // 清空底图
text("server", 15, 45);
Client client =server.available(); // 服务器是否激活
if (client != null) {
if (client.available() > 0){ // 如果从客户端读到内容
// 获取客户端信息,并获取客户端ip地址以作提示
str = "mesage from: " +client.ip() +
" : " + client.readString();
}
}
// 打印客户端信息文本
text(str, 15, textLine);
// 操作传输数据
val++;
if (val >255) val = 0;
server.write(val); // 向服务器写入数据
text("now time: " + val, 15,textLine + 35);
}
Arduino端
Cpp 代码,双击复制代码
?
吐槽w5500 的性能,失望中的失望,号称80Mhz带宽的SPI,简直是垃圾中的战斗机。
[align=left]1.processing建立服务器实际上非常简单:[/align]
[align=left]Server myServer = new Server(this, 5204);[/align]
[align=left]Server()对象初始化有两种模式:[/align]
[align=left]Server(parent, port)[/align]
[align=left]Server(parent, port, host)[/align]
[align=left]parent PApplet: 通常用 this[/align]
[align=left]port int: 端口号[/align]
[align=left]host String: 当使用多个网卡要绑定的ip(或名称)[/align]
[align=left]2.控制台显示:Server SocketException: socket closed[/align]
[align=left]表意:服务器套接字异常:套接字关闭[/align]
[align=left]实际情况:程序退出后系统自动关闭服务器套接字[/align]
[align=left]socket:IP地址和端口号的组合(例如:123.45.67.89:80)被称为一个套接字(socket)。[/align]
[align=left]3. 客户端不能监听服务端[/align]
[align=left] c = s.available(); // 初始化客户端[/align]
[align=left] if (c != null) {[/align]
[align=left] ...[/align]
[align=left]}[/align]
[align=left]为什么不执行?[/align]
[align=left]实际情况:[/align]
[align=left]Server myServer = new Server(this, 5204);[/align]
[align=left]后服务器已经被建立,测试myServer.active()为真。[/align]
[align=left]c = s.available(); 等同于:[/align]
[align=left]c = new Client(this, “填服务器ip”,填服务器端口);[/align]
[align=left]任何操作必须通过客户端获取服务器信息,即使是服务器本机。[/align]
[align=left]之所以c=null,是因为服务器并不是每时每刻传来信息。只有当数据被侦听到时,才做出需要的举动。所以这里指的是数据并不是服务器的套接字。[/align]
WIFI:
P端跟上面一样,A端根据板子的不同要设置一下。
我使用的WiDo。
找到笔记再写。
资源链接:
Arduino_w5500教程(以太网)_小羽
http://pan.baidu.com/s/1slreqeD
processing_网络教程_小羽
http://pan.baidu.com/s/1kU69qL5
相信玩Arduino的在电脑上使用Processing充当上位机与下位机通信和控制的角色也是理所当然了。
如何实现P&A通信?
串口(serial)通信:
Cpp 代码,双击复制代码
?
// 新版Arduino可以智能调节波特率,什么板子都可以上到最高速度。
// 但这只是假象,本意是为了兼容。
// 要根据板子的性能选择波特率,有时候低一点的波特率比如9200、7200传输的信息采样会更密集,平滑。
// 因为处理的带宽是不变的。
Cpp 代码,双击复制代码
?
指的就是通过网线、或者wifi来传输数据。它们都是通过套接字(Sockets)来实现的。
主要就是弄懂:
Ip 地址
Port 端口号
服务端、客户端。(他俩差不多可以互逆)
就行。
我这里使用w5500来作为通讯案例(w5500-w5100的板子写法都一样)。
Processing端
import processing.net.*;
int textLine = 60; // 行间距
int port = 10002; // 端口号 每台电脑可以有65536个端口(太牛逼了),1~1023号端口都有其特殊意义,不要随意使用。
Server server; // 新建服务器对象
void setup()
{
size(400, 400);
textFont(createFont("SanSerif", 16));
server = new Server(this, port); // 初始化服务器,服务端的地址就是本机的IP地址啦(this,port)。
// 想要用别的设备访问这个服务器,输入本机IP地址就好。
// 神马,你不知道如何查看自己的地址?
// 反键点击任务栏右下角的网络标识
// 打开网络和共享中心
// 更改适配器设置
// 反键点击本地网络(或无线网络连接)-> 状态
// 你的IPv4 地址 就是啦~
}
byte val = 0; // 传输数据使用的值
String str = "";
void draw()
{
background(0); // 清空底图
text("server", 15, 45);
Client client =server.available(); // 服务器是否激活
if (client != null) {
if (client.available() > 0){ // 如果从客户端读到内容
// 获取客户端信息,并获取客户端ip地址以作提示
str = "mesage from: " +client.ip() +
" : " + client.readString();
}
}
// 打印客户端信息文本
text(str, 15, textLine);
// 操作传输数据
val++;
if (val >255) val = 0;
server.write(val); // 向服务器写入数据
text("now time: " + val, 15,textLine + 35);
}
Arduino端
Cpp 代码,双击复制代码
?
[align=left]1.processing建立服务器实际上非常简单:[/align]
[align=left]Server myServer = new Server(this, 5204);[/align]
[align=left]Server()对象初始化有两种模式:[/align]
[align=left]Server(parent, port)[/align]
[align=left]Server(parent, port, host)[/align]
[align=left]parent PApplet: 通常用 this[/align]
[align=left]port int: 端口号[/align]
[align=left]host String: 当使用多个网卡要绑定的ip(或名称)[/align]
[align=left]2.控制台显示:Server SocketException: socket closed[/align]
[align=left]表意:服务器套接字异常:套接字关闭[/align]
[align=left]实际情况:程序退出后系统自动关闭服务器套接字[/align]
[align=left]socket:IP地址和端口号的组合(例如:123.45.67.89:80)被称为一个套接字(socket)。[/align]
[align=left]3. 客户端不能监听服务端[/align]
[align=left] c = s.available(); // 初始化客户端[/align]
[align=left] if (c != null) {[/align]
[align=left] ...[/align]
[align=left]}[/align]
[align=left]为什么不执行?[/align]
[align=left]实际情况:[/align]
[align=left]Server myServer = new Server(this, 5204);[/align]
[align=left]后服务器已经被建立,测试myServer.active()为真。[/align]
[align=left]c = s.available(); 等同于:[/align]
[align=left]c = new Client(this, “填服务器ip”,填服务器端口);[/align]
[align=left]任何操作必须通过客户端获取服务器信息,即使是服务器本机。[/align]
[align=left]之所以c=null,是因为服务器并不是每时每刻传来信息。只有当数据被侦听到时,才做出需要的举动。所以这里指的是数据并不是服务器的套接字。[/align]
WIFI:
P端跟上面一样,A端根据板子的不同要设置一下。
我使用的WiDo。
找到笔记再写。
资源链接:
Arduino_w5500教程(以太网)_小羽
http://pan.baidu.com/s/1slreqeD
processing_网络教程_小羽
http://pan.baidu.com/s/1kU69qL5
相关文章推荐
- raspberrypi 与 arduino 使用 nRF24L01+ 通信 -- raspberry pi为发送端
- raspberrypi 与 arduino 使用 nRF24L01+ 通信 -- raspberry pi为发送端(转载)
- 树莓派与Arduino Leonardo使用NRF24L01无线模块通信之基于RF24库 (一) 配置与测试
- 树莓派与Arduino Leonardo使用NRF24L01无线模块通信之基于RF24库 (六) 树莓派查询子节点温湿度数据
- 树莓派与Arduino Leonardo使用NRF24L01无线模块通信之基于RF24库 (五) 树莓派单子节点发送数据
- BatchFileProcessing(3)-使用SSB与数据库通信
- C# / VB / LabView /VC 上位机使用S7-TCP协议与西门子PLC进行网口通信的教程
- Arduino使用蓝牙通信模块
- 关于Arduino 使用软pwm的方法以及与上位机的通讯(带示例)
- 使用 Processing 用 Android 设备控制 Arduino
- arduino与Processing通信问题
- 玩转Web之servlet(四)---B/S是怎样使用http协议完毕通信过程的
- C# / VB / LabView /VC 上位机使用OPC方式与PLC进行通信的教程
- 使用C#应用程序与Arduino开发板进行通信
- 使用Win32 API函数实现vc和arduino简单串口通信
- 玩转Web之servlet(四)---B/S是如何使用http协议完成通信过程的
- Arduino的上位机通信
- 树莓派与Arduino Leonardo使用NRF24L01无线模块通信之基于RF24库 (三) 全双工通信
- 上位机使用Model Bus与PLC通信实现连续地址读写
- 树莓派与Arduino Leonardo使用NRF24L01无线模块通信之基于RF24库 (二) 发送自定义数据