嘘~~听说有逼格的人都基于Arduino搭建个人聊天室了!

网友投稿 2019-09-05 12:23

本聊天服务器应用于局域网内,为了搭建该服务器你需要的硬件有Arduino UNO,Ethernet扩展板,或者也可以使用Arduino的Mega、Leonardo等兼容Ethernet扩展板的主控板替代UNO,甚至你也可以直接使用Arduino Ethernet集成控制器,免去了控制板的堆叠,本次我们使用UNO与新版扩展板堆叠。

同时,你也需要一些C++编程,懂得一点Arduino的基本知识,大佬劝退!

——聪明的瓦肯人
SO,

https://cdn.china-scratch.com/timg/190907/1223194Y2-0.jpg


1、 硬件连接

UNO是啥?
这个

https://cdn.china-scratch.com/timg/190907/1223193c4-1.jpg

Ethernet扩展板是啥?
这个

https://cdn.china-scratch.com/timg/190907/12231ac2-2.jpg

所以,UNO+Etnernet是啥?

这个啦

https://cdn.china-scratch.com/timg/190907/12232032F-3.jpg

注意如果你使用其他主控板的堆叠方案

要注意自己使用的Ethernet扩展板

是新版还是旧版

再结合具体的IO口排布堆叠

实际上,Ethernet扩展板通过SPI总线与Arduino连接,使用时,两者需要通过不同SS引脚选择使能。在UNO或其他使用ATmega328芯片的主控板上,占用13、12、11、10、4引脚进行网络通信及SD卡存储。而MEGA的引脚占用情况可不一样。
同时,旧版的Ethernet扩展板是通过10~13号引脚连接到W5100芯片,使得其只能堆叠到UNO上,与此同时,MEGA的SPI引脚是50~53、Leonardo的SPI引脚在ICSP引脚处。到了新版扩展板,其新添了ICSP引脚母头,所以在上述三个板均可直接堆叠使用。

实在不知道

那就找百度

然后

哪个地方接电源接网线想必是一目了然的

一切都连接好后

上电应该如下图所示

https://cdn.china-scratch.com/timg/190907/1223201J4-4.jpg

PWR、LINK、100M、FULLED以及L
常亮
同时
RX与TX会时不时闪烁
说明发生了一些网络通信

COLL闪烁说明检测到冲突

在这之后是时候写点程序了

https://cdn.china-scratch.com/timg/190907/12232150G-5.jpg

2、服务端搭建

本聊天室是基于Telnet协议连接

其是TCP协议的子集

实际上

我们需要编写的仅仅是服务器程序

至于客户端之后会说

话不多说,上代码

(我们在Arduino IDE中编写代码)

// 调用SPI和Ethernet类库#include #include 
// 输入MAC地址和IP地址,在此后的控制中将会用到// IP地址需要根据本地网络进行设置// 网关和子网掩码、DNS是可选的,可以不用填byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};IPAddress ip(192, 168, 1, 177); // 这段IP都是局域网(比如你的WIFI)下的IP,可以随便设置,一般范围为192.168.1.2~192.168.1.255// 但是不要与该局域网下的其他设备有冲突// IPAddress myDns(192,168,1, 1);// IPAddress gateway(192, 168, 1, 1);// IPAddress subnet(255, 255, 0, 0);
// 创建一个服务器对象,Telnet默认端口为23EthernetServer server(23);// 记录之前是否有客户端接入boolean alreadyConnected = false;
void setup() {  // 初始化网络设备Ethernet.begin(mac, ip, myDns, gateway, subnet);// 开始监听客户端server.begin();  // 初始化串口Serial.begin(9600);while (!Serial) {    ; // 等待串口连接,需要先把USB线接好}
// 串口打印网络设备的IP地址Serial.print("Chat server address:");Serial.println(Ethernet.localIP());}
void loop() {  // 等待一个新的客户端连接:创建一个客户端对象,并通过available()函数返回一个连接到本服务器的对象EthernetClient client = server.available();
  // 当服务器第一次发送数据时,发送一个Hello回应if (client) {if (!alreadyConnected) {      // flush()函数清除输入缓冲区client.flush();Serial.println("We have a new client");      // 向客户端发送数据client.println("Hello, client!");alreadyConnected = true;}
if (client.available() > 0) {      // 读取从客户端发来的数据char thisChar = client.read();      // 服务器发送从某一台客户端收到的数据到所有客户端(一般在屏幕上显示)server.write(thisChar);      // 将同样的数据发送到串口Serial.write(thisChar);}}}
有了这些解释是不是非常简单?
https://cdn.china-scratch.com/timg/190907/1223212E8-6.jpg

写完了程序就开始烧录吧

在Arduino IDE中

选择UNO以及相应的端口号

编译

上传

https://cdn.china-scratch.com/timg/190907/12232131R-7.jpg

3、客户端搭建

严格地说

客户端算不上搭建

仅仅算是开启Telnet客户端

这里我们以windows系统为例

在XP系统中

该客户端是默认开启的

其他windows系统的请跟我来

马上就要成功了

https://cdn.china-scratch.com/timg/190907/122321K49-8.jpg

步骤:

控制面板-程序-程序和功能

(有些小伙伴可能在控制面板中直接就找到了程序和功能)

选择

打开或关闭Windows功能

从而打开了windows功能对话框

(由于功能众多,打开该对话框需要缓冲的时间较长)

耐心等待哦

然后选中

Telnet客户端

点击确定

https://cdn.china-scratch.com/timg/190907/1223213H4-9.jpg

4、开启对话

快捷键

开始+R

(开始菜单+运行)

输入

telnet

点击确定

https://cdn.china-scratch.com/timg/190907/1223222507-10.jpg

在出现的命令行对话框中输入

open 192.168.1.177 [23]

这里的192.168.1.177换成你自己在上面的程序中设置的IP

端口号[23]是默认的

所以可以省略

https://cdn.china-scratch.com/timg/190907/1223225014-11.jpg

回车之后

你会发现

界面一直显示“正在连接......”

如上图所示

Don't worry!

实际此时上已经连上了

键盘上随便敲一个字母就能进入对话界面

是的,我敲了一个K

https://cdn.china-scratch.com/timg/190907/1223225Z2-12.jpg

上面的"Hello client!"

不就是服务端程序中的这段代码吗?

https://cdn.china-scratch.com/timg/190907/12232345S-13.jpg

太无聊了

赶紧再找另一台电脑加入聊天室

操作如上

结果如下

https://cdn.china-scratch.com/timg/190907/12232323I-14.jpg

全程匿名

但是

缺点也是显而易见的

就是输入法有问题

除了英文,似乎只有渣渣的微软拼音

更要命的是

显示也是一塌糊涂

但这并不妨碍你在朋友面前

有逼格

https://cdn.china-scratch.com/timg/190907/122323F27-15.jpg

技术无原罪,装逼有风险,不经意间的流露才是真正的大哥,有逼格的生活就是这么的朴实无华!还不快快搭建起来!

——聪明的瓦肯人

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com