您的位置:首页 > 产品设计 > UI/UE

使用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  processing 通信