【香橙派 Kunpeng Pro】搭建一个简易的TCP物联网接收数据平台

目录

  • 前言
  • 一、介绍
  • 1.开发板介绍
  • 2.系统介绍
  • 二、开始
  • 1.启动开发板
  • 2.搭建TCP服务器
  • 3.esp01s连接香橙派 Kunpeng Pro搭建的TCP服务器
  • 4.编写CH32F103C8T6的代码
  • 总结

前言

这几天参加了个活动,让我测评一下香橙派 Kunpeng Pro,然后这几天也就在构想拿这个做些什么内容要好,突然我想到要不用香橙派 Kunpeng Pro和我自己做的CH32F103配合esp01s做一个物联网平台,所以就有了这一篇文章。

一、介绍

1.开发板介绍

香橙派 Kunpeng Pro是香橙派联合华为打造的一款超强算力鲲鹏开发板,采用4核64位处理器+AI处理器,集成图形处理器,支持8TOPS AI算力,拥有8GB/16GB LPDDR4X,可以外接32GB/64GB/128GB/256GB eMMC模块,支持双4K高清输出。

正面

1.jpg

反面

2.jpg

配套的设备也是很丰富的,有一张装有openEuler的系统的32G SD卡,可以直接省略掉烧写系统的步骤了。

还配合着一个65W快充头,可以想到这个板子的算力该有多大。

这块板子支持3种存储器器,一种就是我们常见的SD卡,还有一种是eMMC

3.png

还有一种是NVMeSSD

4.png

这三种都有对应的烧录办法和启动办法,也就是说我们可以不用再从SD卡启动系统了,我们可以选择这两种中的一个来启动系统。

在板子上的这个位置设置启动的方式

5.png

具体的烧录方法和启动方法大家可以看一下官方手册,这一章写的是非常滴清楚。

2.系统介绍

该开发板支持的openEuler系统是面向数字基础设施的开源Linux操作系统,应用的范围也是非常的广,面向与金融、运营商、能源、物流、科研、云计算等方面,对于嵌入式行业应用也是比较广的。

我们可以在这里下载和板子配套的系统openEuler

二、开始

1.启动开发板

看过我之前文章的都明白,我以解决为主,所以没有屏幕,一个串口走天下,所以实现要准备一根usb线,然后把usb线插入到板子的这个位置

6.jpg

然后另一端插到电脑上

7.jpg

如果你没usb线,但是有usb to ttl,那连线应该是这样

9.png

8.jpg

然后打开串口管理工具,这里是使用的是MobaXterm Personal串口工具,比我之前用的那些工具要好用,然后新建串口,选择usb或者是usb to ttl的串口设备后,波特率设置为115200

10.png

之后将配套的type头插入到板子的这个位置供电

12.jpg

就可以看到启动的一些提示了

11.png

等待一会会要我们登录一下,用户名为:root,密码为openEuler,然后就可以进入到系统了。

这里我做了个很疑惑的操作,之前玩香橙派的时候我都是使用wiringPi这个库来操作gpio口,然后我就想着,这个有没有,然后我就到那个熟悉的路径/usr/src去查看,结果没有找到,我就按照之前的安装方法安装了一下,然后一启动

13.png

运行不了,看了一下这个库的文档,发现不支持,然后我就继续翻看手册,发现是使用的是gpio_operate,然后我就按照手册上使用了一下-h查看,结果

14.png

用不了了,我后面先重装一下系统,但是我又懒了,所以我准备换个思路,用这个香橙派 Kunpeng Pro做一个云平台,然后家里面的其他单片机采集的数据后就将数据发送到该云平台中实现一个数据收集的云平台,后面做一些数据清洗都比较的方便。

2.搭建TCP服务器

实现先在香橙派 Kunpeng Pro中用C语言写一个TCP通讯的服务端,代码很简单,一般学过Linux网络通讯的都可以写出来,其实本质就是创建套接字,绑定套接字,监听套接字,对连接进行处理

tcp服务通信流程1.png

在此之前需要先连接一下wifi,使用nmcli dev wifi来查看一下附近的wifi

15.png

nmcli dev wifi connect 名称 password 密码 来连接wifi。

然后就可以开始写代码了,实现创建一个套接字,代码如下:

int socket_fd;
socket_fd = socket(AF_INET, SOCK_STREAM, 0);
if (socket_fd < 0){
    perror("socket");
    return -1;
}

然后对该套接字进行绑定,但在绑定前需要创建一个结构体,这个结构体主要是设置连接的是ipv4还是ipv6,然后绑定的IP地址和端口号,然后将套接字和结构体放进去即可,代码如下:

int ret;        // 返回值结果,在这定义,下面的代码中就不再书写
struct sockaddr_in sa;
sa.sin_family = AF_INET;     // 设置协议族
sa.sin_port = htons(8000);   // 端口号
sa.sin_addr.s_addr = INADDR_ANY;     // 这里使用的是调配符,也就是说将所有的IP地址全部包含了
ret = bind(socket_fd, (struct sockaddr*)&sa, sizeof(sa));      //  将套接字和设置的内容进行绑定
if (ret < 0){
    perror("bind");
    close(socket_fd);    // 关闭套接字
    return -2;
}

设置完成后就可以开始监听该套接字了,使用listen(),如果没有连接会一直在该监听中持续,直到有连接,当有连接的时候,使用accept()函数将该套接字拿取出来进行处理,这里的处理可以是读或者是写,代码如下:

int new_sock_fd;     // 新的套接字
int size;            // 绑定时写的结构体大小
ret = listen(socket_fd, 128);    // 这个是监听
if (ret < 0){
    // 当监听后就会判断一下是否成功,如果不成功就直接释放资源后结束
    perror("listen");
    close(socket_fd);
    return -3;
}
size = sizeof(sa);    // 获取之前结构体的大小,之后是需要使用的
new_sock_fd = accept(socket_fd, (struct sockaddr*)&sa, &size);
if (new_sock_fd < 0){
    // 没有成功的获取套接字
    perror("accept");
    close(socket_fd);
    return -4;
}
while(1){
    // 开始读或者写数据
}

这样就可以搭建一个简易的TCP服务器了,现在只需要测试一下esp01是否能发送数据,所以这够用,完整代码如下:

#include <sys/socket.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <arpa/inet.h>

#define SIZE 1024

int main(){
    int socket_fd, ret = -1, size;
    struct sockaddr_in sa;
    int     new_sock_fd, n;
    char buf[SIZE];

    sa.sin_family = AF_INET;
    sa.sin_port = htons(8000);
    sa.sin_addr.s_addr = INADDR_ANY;
    socket_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (socket_fd < 0){
        perror("socket");
        return -1;
    }
    ret = bind(socket_fd, (struct sockaddr*)&sa, sizeof(sa));
    if (ret < 0){
        perror("bind");
        close(socket_fd);
        return -2;
    }
    ret = listen(socket_fd, 128);
    if (ret < 0){
        perror("listen");
        close(socket_fd);
        return -3;
    }
    size = sizeof(sa);
    new_sock_fd = accept(socket_fd, (struct sockaddr*)&sa, &size);
    if (new_sock_fd < 0){
        perror("accept");
        close(socket_fd);
        return -4;
    }
    while(1){
        // 这里是读取TCP协议得到的内容
        n = read(new_sock_fd, buf, sizeof(buf));
        printf("esp-01:%s\n", buf);
        memset(buf, 0, SIZE);
    }
    close(new_sock_fd);
    close(socket_fd);
    return 0;
}

然后我们使用gcc就可以编译,然后并运行。

3.esp01s连接香橙派 Kunpeng Pro搭建的TCP服务器

这里我搞了很久,因为我想先在我的电脑上试一下,然后再在香橙派 Kunpeng Pro上使用,但是一直没有成功,后面我就写了个TCP后终于成功了,所以我先介绍如何搭建TCP服务器再说这个。

esp01s的操作很简单,就是使用AT指令就可以了,首先先用AT+CWJAP="wifi名称","密码"连接wifi,记住,这个连接的wifi需要和香橙派 Kunpeng Pro连接的wifi是同一个wifi,否则可能TCP没办法连接。

然后使用AT+PING看看esp01s能否到达,如果不能到达有可能就是不在同一个网段,然后使用AT+CIPSTART="TCP","192.168.137.154",8000连接到香橙派 Kunpeng Pro上的TCP服务器,这里按照你在搭建的时候书写的内容来更改,然后发送后出现这个就说明连接成功了

16.png

然后我们设置一下传输的长度:AT+CIPSEND=24,这里是24个字符,然后出现>就可以输入内容了

17.png

这里我随便输入一个24个的内容

18.png

然后在TCP服务端上看一下,可以看到已经显示了:

19.png

这就已经完成了一般了,下一步就是为ch32f103c8t6写对应的代码了。

4.编写CH32F103C8T6的代码

这篇文章并不是在讲单片机,所以我这只粘贴个代码和效果图,如果对于这方面感兴趣可以继续关注,后面我会写对应的教程的。

主函数

#include "gpio.h"
#include "stm32f10x.h"
#include "oled.h"
#include "ds18b20.h"
#include "stdio.h"
#include "usart.h"
#include "esp01s.h"
#include "sys.h"

int main(){
    float temp;
    u8 buf[11], con[11];
    My_GPIO_Init();
    My_USART_Init();
    OLED_Init();
    ESP01S_WIFI();
    Delay_Ms(5000);
    while(1){
        OLED_show_string(0, 0, "hello");
        temp = DS18B20_Read_Temp();
        sprintf(buf, "temp:%.2fC",temp);
        OLED_show_string(1, 0, buf);
        ESP01S_Send(buf);
        Delay_Ms(1000);
    }
}

20.jpg

21.png

这个图片是数据是一开始启动的时候的。

这个代码还有一点问题,我还在改进,先不粘贴了。

总结

香橙派 Kunpeng Pro的性能是非常的不错的,用来作为一个云处理平台也是绰绰有余的,后面可以使用香橙派 Kunpeng Pro做一个家庭物联网平台带有一些数据处理并能控制的一个云平台,再配合着一个摄像头制作一个人脸识别的项目,这是我接下来的想法。

总的来说这个板子非常的不错,适合做物联网和人工智能,我也慢慢学习一下,然后后面给大家做一个出来。

  • 31
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恰柠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值