承接第七天:zigbee无线传感网实训---实现LCD开发板播放音乐并切换歌曲(The Seventh day)
一、实验准备器材如图:
二:步骤
===============================一、裸机开发-IO控制===========================
1.1 控制流程
(1)查看原理图
得到硬件对应的是cc2530的什么引脚
(2)查看芯片手册
找到对应的控制方法
(3)编写代码
根据芯片手册的说明,写程序控制对应的引脚
(4)编译程序
(5)下载运行
1.2 IO寄存器
IO寄存器共三组,每组以下标0-2命名
1.2.1 PxSEL IO功能选择寄存器
每个IO口引脚有通用功能和拓展功能(外部设备IO信号)
通过操作引脚对应的下标注,即可生效
0:通用功能
1:外设功能
1.2.2 PxDIR 引脚功能选择寄存器
通过操作引脚对应的下标注,即可生效
0:输入功能
1:输出功能
1.2.3 Px_n 具体的引脚使用
设置对应功能后,可以直接使用。
#define BLED P1_0
#define KEY3 P1_2
写:BLED = 1;
读:KEY3 == 1;
----------------------------------------------------------------------
========================二、协议栈的工作原理======================================
1.1 有线网的工作原理:
由三大运营商各自管理唯一的基站管理上网
--->总基站将网络分发M条网线发送到全国各地基站
--->各地基站将网络分发到每个城市的服务器(路由)
--->城市路由将网线分布成每条网线,分发到每家每户
1.2 无线网络工作原理:
将上述的有线全部转换为无线
1.3 无线网络的组建
必须由RF模块向空中发出网络组建信号,在其传播范围内,只要感知到网络信号,就会自动形成一个无线的局域网。
1.3.1 数据的发送:
根据无线网络的网段:向空中发送一个特定的某个波形的无线电波,电波自动匹配相同的网络标记。
完成数据的收/发
1.3.2 网络标识符的作用:
在无线网络通信时,由于同一个局域网中,往往不止存在一个网络。但在在数据收发时,应该区分符合条件的网络
才能接收数据,网络标识符用于区分不同的网络。(类似有线网络中的IP地址)
-------------------------------------------------
安装Z-stack(先下载:ZStack-CC2530-2.5.1a.exe) --> 在磁盘c中找到“ C:Texas InstrumentsZStack-CC2530-2.5.1aProjectszstackSamplesSampleAppCC2530DB ”
打开“ SampleApp.eww ”
APP:应用程序目录,用户开发程序的位置
ZMain:协议栈的第一句代码执行的位置
zmain ---> main ---> osal_init_systeam();
--->osalInitTasks(); //创建任务ID,每任务都会有对应的处理函数(9个)
--->SampleApp_Init(taskID) //用户事件初始化
初始化完成后,准备启动系统
osal_start_system(); --->系统进入死循环(检测每个任务是否发生)
do {
if (tasksEvents[idx]) // 判断任务事件是否发生,当事件发生,对应的ID会被置1
{
break;
}
} while (++idx < tasksCnt);
--->执行任务对应的处理函数
events = (tasksArr[idx])( idx, events );
tasksArr数组:保存了每一个任务对应的处理函数
events:(事件对应的任务)
-----------------------------------------------------------------------
打开协议栈之后,进行编译,下载时,注意选择下载的设备模式。
左边导航栏--->workspace-->coordinatorEB/coordinatorEB-pro
2.1 zigbee终端的模式
协调器(coodr):专门用于组建网络(没有网络的情况),唯一的管理者。管理整个无线网络(组建、节点加入、路由加入)
路由(route):多级网络的组建,数据的分发。
终端(enddev):只能加入到已有的网络当中,仅仅只能数据的收发。
2.2 网络拓扑结构(结合图示,将工作原理讲述清楚)
星型:每个节点/路由都是必须直接与协调器相连,连接数少,范围受限
网状:每个路由器都能进行互联,数据转发速度快,可靠性高
树状:更好的拓展网络连接数,网络的距离。
-----------------------------------------------------------------------
组网测试(协调器):
(1)、修改PID: /Tools/f8wconfig.cfg/PAN_ID = (0x0011 - 0x0024)
第一排第一组:0x0011
第一排第二组:0x0012
第一排第三组:0x0013
第一排第四组:0x0014 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24
(2)配置IO引脚
在ADD--->sampleapp.h 添加头文件 ioCC2530.h
在ADD--->sampleapp.c -->SampleApp_Init(180行后)函数中添加LED2的初始化函数(P1DIR |= 0x02)
(3)增加代码:
(注意先将头文件和IO初始化)
/app/sampleapp.c/400行/增加YLED=1;(YLED 是自己define定义的)
(4)编译
(5)下载配置
左边导航栏--->workspece--->coordinatorEB,下载
组网测试(节点)
(1)修改PID:/Tools/f8wconfig.cfg/58行/PAN_ID=(0x0000-0x3fff)
第一排第一组:0x0011 0x0012 0x0013
第二排第一组:0x0021 0x0022 0x0023
(2)配置IO引脚
在ADD--->sampleapp.h 添加头文件 ioCC2530.h
在ADD--->sampleapp.c -->SampleApp_Init(180行后)函数中添加LED2的初始化函数(P1DIR |= 0x02)
(3)增加代码:
(注意先将头文件和IO初始化)
/app/sampleapp.c/400行/增加YLED=1;
(4)编译
(5)下载配置
左边导航栏--->workspece--->EnddeviceEB,下载
完整版请下载:coodr_or_endivce.zip
请下载:串口调试器
---------------------------------------------------------------
初始化串口
配置串口号、波特率、流控、校验位等以前我们都是配置好寄存器然后使用。
现在我们在workspace 下找到HALTargetCC2530EBdrivers 的chal_uart.c文件,
我们可以看到里面已经包括了串口初始化、发送、接收等函数
总结:
在组网的时候一定要注意修改panid 防止串网
ttySAC0 ---> 对应现在连接电脑的串口
ttySAC1 ---> com2
ttySAC2 ---> com3
ttySAC3 ---> com4
串口调试器显示:
开发板 协调器节点
5v 5v
rx tx
tx rx
gnd gnd
T**H**
ZigBee连接开发板显示温湿度
serial.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108#include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <termios.h> #include <sys/types.h> #include <sys/select.h> #include <stdlib.h> #include <unistd.h> #include <netdb.h> #include <string.h> #include <errno.h> #include <time.h> #include <pthread.h> /* 目的:linux中的串口配置 效果:我的开发板跟另外一个开发板之间使用串口来收发数据 6818的开发板上有四个串口的驱动,分别 /dev/ttySAC0 ----/dev/ttySAC3 接收端 */ #define UARTPATH "/dev/ttySAC1" int ser_fd; //将串口配置封装成函数 int serial_init(int *serialfd) { struct termios myios; //打开串口 *serialfd=open(UARTPATH,O_RDWR);//com2 if(*serialfd==-1) { perror("打开串口失败!n"); return -1; } //获取现有串口参数 tcgetattr(*serialfd,&myios); //原始模式 cfmakeraw(&myios); //设置波特率 cfsetispeed(&myios, B115200); cfsetospeed(&myios, B115200); myios.c_cflag |= CLOCAL | CREAD; //8位数据位,无奇偶校验 myios.c_cflag &= ~CSIZE; myios.c_cflag |= CS8; myios.c_cflag &= ~PARENB; //无奇偶校验 //1位停止位 myios.c_cflag &= ~CSTOPB; //清除串口缓冲区 tcflush(*serialfd,TCIOFLUSH); myios.c_cc[VTIME] = 0; myios.c_cc[VMIN] = 1; tcflush(*serialfd,TCIOFLUSH); //让前面的配置生效 tcsetattr(*serialfd,TCSANOW,&myios); return 0; } void *fun(void *arg) { char message[6]; while(1) { memset(message,0,6); read(ser_fd,message,6); printf("message = %sn",message); //打开LCD屏 int fd = open("/dev/fb0", O_WRONLY); if(fd == -1) { perror("打开LCD失败:n"); exit(0); } write(fd, &message, 4); close(fd); tcflush( ser_fd, TCIOFLUSH); //刷新缓冲区 } } int main() { char buf[30]; //配置串口 serial_init(&ser_fd); //使用串口收发数据(通过串口接收数据) pthread_t thread; pthread_create(&thread,NULL,fun,NULL); while(1) { write(ser_fd,"11",3); sleep(1); write(ser_fd,"10",3); sleep(1); write(ser_fd,"21",3); sleep(1); write(ser_fd,"20",3); sleep(1); } //关闭 close(ser_fd); return 0; }
在虚拟机上编译:
1arm-none-linux-gnueabi-gcc serial.c -o serial -lpthread
在LCD开发板上下载并打开:
1
2
3tftp -g 192.168.1.182 -r serial chmod 777 serial ./serial
结果显示:
最后
以上就是笑点低月饼最近收集整理的关于zigbee无线传感网实训---zigbee显示温湿度以及连接LCD开发板显示温湿度(The Eighth day)的全部内容,更多相关zigbee无线传感网实训---zigbee显示温湿度以及连接LCD开发板显示温湿度(The内容请搜索靠谱客的其他文章。
发表评论 取消回复