# 嵌入式工作室-IoT方向-暑招



## 目标：实现树莓派与PC机的网络通信（Socket），并且可控制点亮LED灯

------

## 阶段一：Linux学习	（建议：5天）（20分）

1. 学习安装虚拟机，并选取自己喜欢的linux系统学习安装（建议Ubuntu），熟悉基本功能的配置（图形界面）

2. 学习linux命令行的使用，如用户操作、软件更新、安装、重启等，并用linux操作系统编译并运行一段C代码

3. 了解linux系统中各分区、文件的作用与内容（了解即可）

4. 学习如何创建文件、删除文件、移动文件、更改文件名等命令

5. 学习Shell编程，并完成以下题目：

   编写1个弹出式菜单的Shell程序并实现其简单的菜单功能：

```bash
--------MENU---------
1.Copy		2.Rename
3.Remove	4.Find
5.Exit
------Your-Name------
Your Chioce is [_]?
```

- 即用户按下数字1，则提示用户输入源和目的文件名后，执行复制操作；
- 输入数字2，则提示用户输入要更名的文件或目录后，执行更名操作；
- 输入数字3，则提示用户输入要删除的文件，执行删除操作； 
- 输入数字4，则提示用户输入要查找的文件，执行查找操作；
- 输入数字5，则退出该菜单shell程序的执行。

参考知识：B站、百度、CSDN、谷歌等



## 阶段二：计算机网络入门	（建议：10天）（30分）

1. 学习TCP/IP协议栈基本知识，理解两个计算机是如何建立连接并进行通信的，了解每层协议的主要功能与工作流程（面试阶段会进行提问）
2. 学习以下命令的使用以及其输出的内容的含义：
   - 能够使用ifconfig命令查询并配置网络状态
   - 能够使用netstat命令查看TCP、UDP端口
   - 能够用nslookup翻译域名对应IP同时查看本机DNS服务器
   - 能够使用ping命令探测指定IP或域名的网络状况
   - 能够使用traceroute命令进行路由跟踪
     …………
3. 学习使用SSH连接你的虚拟机。
4. 学习Linux下Socket基础知识，了解字节序概念，学习相关C语言函数的使用
5. 使用Linux Socket知识，编写单线程TCP网络通信程序，Server.c、Client.c，实现单用户下数据的传输
6. 使用SSH开两个终端连接虚拟机，一个运行服务端程序，一个运行客户端程序，实现跨用户的数据传输

备注：此阶段允许参考网络程序，允许向学长或他人请教，但代码需有自己的理解（可以抄，但你得懂你抄的是什么，为什么要这么抄）

参考链接：https://www.linuxprobe.com/linux-network-command.html
https://www.cnblogs.com/rainbow1122/p/7852570.html
https://blog.csdn.net/u011436427/article/details/81234023
https://www.runoob.com/w3cnote/android-tutorial-socket-intro.html
……
参考资料：《Linux命令行大全》《UNIX网络编程 卷1：套接字联网API》……



## 阶段三：树莓派学习与实践	（剩余时间）（50分）

前言：做到这儿的朋友再买树莓派吧，记得开发票（详细操作询问工作室学长）

1. 购买树莓派（带wifi模块的），以及相应的配件（SD卡、电源线、网线、读卡器等）（这一步可以咨询工作室前辈进行选购）
2. 收到树莓派后学习树莓派上操作系统的安装（网上有很多教程）
3. 学习树莓派SSH与VNC连接（VNC可以远程使用树莓派图形界面）
4. 安装完成后，将前两题的内容在树莓派上复现并调试
5. 学习树莓派GPIO口的操作，可以使用Python，能够用GPIO亮一个LED（自处可能需要LED灯泡与杜邦线，可联系学长学姐）
6. 尝试PC机与树莓派之间建立Socket通信，并尝试结题挑战

参考：B站、百度、CSDN、谷歌、学长学姐等



## 结题目标挑战：

#### 使用以上学到的所有知识，完成通过PC机与树莓派建立网络连接，通过发送命令控制连接在树莓派上的LED的亮灭。

#### （语言不限，实现功能即可）

------

## 截止时间与提交内容

阶段一提交：Shell编程代码（7月18日之前）

阶段二提交：双终端数据传输视频（7月31日之前）

阶段三提交：结题目标视频（开学前，含军训期间）

面试：军训结束后

结果：开学前公布

请在每个阶段截止前，发送压缩文件包邮件到 1163249820@qq.com （余子潇），对题目有疑问也可联系余子潇进行咨询，有特殊原因可以补交。前两个阶段不需要购买任何硬件设备，使用一台可联网的笔记本电脑即可完成，如果还能进行一定程度的学习笔记记录，将会有不少的加分，大家加油哦。

寄语：这是一个学习的过程，项目驱动式的，并不是那种漫无目的的学习，建议边学边做，需要做啥，再去学啥，这样效率能高不少。此外，欢迎大家与出题人或者工作室的前辈多多交流，IoT方向是嵌入式工作室今年的新方向，由原来Linux方向升级而来，可能在题目设置等方面会存在考虑不周全的地方，存在一定挑战。当然，问问题之前希望已经进行过比较深入的思考与资料的查找，最好不要相互浪费时间。祝挑战成功。