赞
踩
这几天参加了个活动,让我测评一下香橙派 Kunpeng Pro,然后这几天也就在构想拿这个做些什么内容要好,突然我想到要不用香橙派 Kunpeng Pro和我自己做的CH32F103配合esp01s做一个物联网平台,所以就有了这一篇文章。
香橙派 Kunpeng Pro是香橙派联合华为打造的一款超强算力鲲鹏开发板,采用4核64位处理器+AI处理器,集成图形处理器,支持8TOPS AI算力,拥有8GB/16GB LPDDR4X,可以外接32GB/64GB/128GB/256GB eMMC模块,支持双4K高清输出。
正面
反面
配套的设备也是很丰富的,有一张装有openEuler
的系统的32G SD卡,可以直接省略掉烧写系统的步骤了。
还配合着一个65W快充头,可以想到这个板子的算力该有多大。
这块板子支持3种存储器器,一种就是我们常见的SD卡,还有一种是eMMC
还有一种是NVMeSSD
这三种都有对应的烧录办法和启动办法,也就是说我们可以不用再从SD卡启动系统了,我们可以选择这两种中的一个来启动系统。
在板子上的这个位置设置启动的方式
具体的烧录方法和启动方法大家可以看一下官方手册,这一章写的是非常滴清楚。
该开发板支持的openEuler
系统是面向数字基础设施的开源Linux操作系统,应用的范围也是非常的广,面向与金融、运营商、能源、物流、科研、云计算等方面,对于嵌入式行业应用也是比较广的。
我们可以在这里下载和板子配套的系统openEuler
看过我之前文章的都明白,我以解决为主,所以没有屏幕,一个串口走天下,所以实现要准备一根usb线,然后把usb线插入到板子的这个位置
然后另一端插到电脑上
如果你没usb线,但是有usb to ttl
,那连线应该是这样
然后打开串口管理工具,这里是使用的是MobaXterm Personal
串口工具,比我之前用的那些工具要好用,然后新建串口,选择usb或者是usb to ttl的串口设备后,波特率设置为115200
之后将配套的type头插入到板子的这个位置供电
就可以看到启动的一些提示了
等待一会会要我们登录一下,用户名为:root,密码为openEuler,然后就可以进入到系统了。
这里我做了个很疑惑的操作,之前玩香橙派的时候我都是使用wiringPi
这个库来操作gpio口,然后我就想着,这个有没有,然后我就到那个熟悉的路径/usr/src
去查看,结果没有找到,我就按照之前的安装方法安装了一下,然后一启动
运行不了,看了一下这个库的文档,发现不支持,然后我就继续翻看手册,发现是使用的是gpio_operate
,然后我就按照手册上使用了一下-h查看,结果
用不了了,我后面先重装一下系统,但是我又懒了,所以我准备换个思路,用这个香橙派 Kunpeng Pro做一个云平台,然后家里面的其他单片机采集的数据后就将数据发送到该云平台中实现一个数据收集的云平台,后面做一些数据清洗都比较的方便。
实现先在香橙派 Kunpeng Pro中用C语言写一个TCP通讯的服务端,代码很简单,一般学过Linux网络通讯的都可以写出来,其实本质就是创建套接字,绑定套接字,监听套接字,对连接进行处理
在此之前需要先连接一下wifi,使用nmcli dev wifi
来查看一下附近的wifi
用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就可以编译,然后并运行。
这里我搞了很久,因为我想先在我的电脑上试一下,然后再在香橙派 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服务器,这里按照你在搭建的时候书写的内容来更改,然后发送后出现这个就说明连接成功了
然后我们设置一下传输的长度:AT+CIPSEND=24
,这里是24个字符,然后出现>
就可以输入内容了
这里我随便输入一个24个的内容
然后在TCP服务端上看一下,可以看到已经显示了:
这就已经完成了一般了,下一步就是为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);
}
}
这个图片是数据是一开始启动的时候的。
这个代码还有一点问题,我还在改进,先不粘贴了。
香橙派 Kunpeng Pro的性能是非常的不错的,用来作为一个云处理平台也是绰绰有余的,后面可以使用香橙派 Kunpeng Pro做一个家庭物联网平台带有一些数据处理并能控制的一个云平台,再配合着一个摄像头制作一个人脸识别的项目,这是我接下来的想法。
总的来说这个板子非常的不错,适合做物联网和人工智能,我也慢慢学习一下,然后后面给大家做一个出来。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。