本帖最后由 zhixiaoyuhong 于 2016-11-3 20:59 编辑
前面几篇帖子做了BBB从开箱到部分功能以及系统的介绍,本来打算慢慢研究的,这么高端的板子玩转了也不是那么容易的,借的宋老大的4.0内核的驱动书还没看完呢,结果福利君催着让结项,心里盘算了下,搞到目前为止,已经可以实现申请板子时的条件,可以结项了,福利君也不容易,兄弟们都体谅下,对吧。看帖。。。 申请这块板子的主要想法是用BBB 做一个室内终端,采集各个节点的各种数据,各节点与BBB 之间通过串口连接通信,BBB 收集到数据后通过网络将数据发送至主机上,下面简单介绍下: 首先要将数据发送至PC 机,就需要搞定网络通信这块,还好,手头有本unix 网络通信的书,啃了几天,打通了这条路。现在毕设就准备做智能家居的数据采集这块,节点板子刚开始设计,集成了温度、湿度、气压以及一些我们团队专用的传感器,刚开始设计,还没搞定,还好,手头有块stm8 的板子,就凑活着用来做个节点,来发送数据给BBB 吧,毕设用的是STM32f030 ,节点这块差不多。。。试验环境是酱紫的:
先上BBB端的代码:
- #include
- #include
- #include
- #include
- #include
- #include
- #include <time.h>
- #include
- #include
- #include
- #include
- #include
- #include
- #include
-
- #define SERVER_IP "192.168.1.82"
- #define SERVER_PORT 10010
- #define MY_IP "192.168.1.230"
- #define MY_PORT 10010
-
- #define FILE_NAME "/dev/ttyO0"
- #define MAX_LEN 128
-
- int main(void)
- {
- int serial_buffer[MAX_LEN] = {0};
- char data2send[4096] = {0};
- int numbers2send = 0;
- int i = 0;
-
- int serial_fd = open(FILE_NAME, O_RDWR);
- if(serial_fd < 0){
- printf("Serial port open error.n");
- return -1;
- }
-
- int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
- if(socket_fd < 0){
- perror("socket_fd");
- return -1;
- }
- printf("Ready to connect the server...n");
-
- struct sockaddr_in server_addr = {0};
- server_addr.sin_family = AF_INET;
- server_addr.sin_port = htons(SERVER_PORT);
- server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
-
- int ret = connect(socket_fd, (struct sockaddr *)&server_addr, sizeof(server_addr));
- if(ret < 0){
- perror("connect");
- return -1;
- }
-
- printf("connect success.n");
-
- while(1){
- for(i=0; i
- serial_buffer[i] = 0;
- }
- read(serial_fd, serial_buffer, MAX_LEN);
- printf("[%s].n", serial_buffer);
- send(socket_fd, serial_buffer, MAX_LEN, 0);
- }
- close(serial_fd);
- close(socket_fd);
- return 0;
- }
复制代码
然后来PC主机端的:
- #include
- #include
- #include
- #include
- #include
- #include
- #include
-
- #define MY_IP "192.168.1.82"
- #define MY_PORT 10010
- int main(void)
- {
- int length = 0;
- char server_buffer[128] = {0};
- char client_buff[128] = {0};
- struct sockaddr_in server_addr = {0};
- struct sockaddr_in client_addr = {0};
- int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
- if(socket_fd < 0){
- perror("socket_fd");
- return -1;
- }
- server_addr.sin_family = AF_INET;
- server_addr.sin_port = htons(MY_PORT);
- server_addr.sin_addr.s_addr = inet_addr(MY_IP);
- int ret = bind(socket_fd, (struct sockaddr *)&server_addr, sizeof(server_addr));
- if(ret < 0){
- perror("bind");
- return -1;
- }
-
- ret = listen(socket_fd, 10);
- if(ret < 0){
- perror("listen");
- return -1;
- }
- printf("Server is OK...n");
- length = sizeof(client_addr);
- int client_fd = accept(socket_fd, (struct sockaddr *)&client_addr, &length);
- if(client_fd < 0){
- perror("accept error.n");
- return -1;
- }
- printf("Connected from %s, Port is %dn",
- inet_ntop(AF_INET, &client_addr.sin_addr, client_buff, sizeof(client_buff)),
- ntohs(client_addr.sin_port));
- while(1){
- memset(server_buffer, 0, sizeof(server_buffer));
- ret = recv(client_fd, server_buffer, sizeof(server_buffer), 0);
- printf("[%s].n", server_buffer);
- }
- close(socket_fd);
- return 0;
- }
复制代码
然后来段stm8这上面的数据发送代码,来起到节点对BBB发送数据的效果:
然后在BBB端和PC端会分别收到数据,并显示出来:
至此,BeagleBone Black工业版试用到此结束了,回想一下,从开始收到板子,拆箱篇开始,慢慢到搜索各种信息一门心思项要玩转它,期间经过了蛋疼苦逼的悲剧,也收获了不少知识,之前从未用过TI的soc,刚一入手,感觉还是有点难度,本打算从uboot开始,自己移植bootloader和kernel,无奈难度太大,感慨自己水平还是不够,这才从2440这刚出来,还没出徒,就想着搞这么大的工程,蛋都扯没了。。。还好,BBB是一款经典、开源的板子,国外和国内很多大牛无私奉献了自己的帖子,阅读后收益匪浅,虽说只有短短的两个多月,但经历了理想与现实的磨炼,还是发现了自己的不足。往后还需要狠狠地练习内功方能得心应手一点。。。 TI的这款开源硬件,无论是从硬件配置,还是从做工、软硬件资源来说,都是一块经典的板子,当然,最有诱惑的还是它的价格啦,对吧。。。BBB工业版继承了黑色狗板的经典,扩宽了工作温度,之前在BBB官网上看到过有国外大牛用该板子做了水下机器人,很喜欢,往后的日子,打算靠这块板子深入学习下嵌入式,尽量将它玩的更转一点,也别辜负了福利君和发烧友的厚待,对吧,再次一如既往的感谢福利君和发烧友平台。。。
|