实训ZigBee报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实训ZigBee报告
ZigBee实训报告
实训要求:(1)EB板按键能控制LED灯的亮灭;
(2)C#软件开发界⾯控件能控制ZigBee板上LED灯的亮灭;
(3)C#界⾯能通过图⽚实时显⽰ZigBee板上LED的亮灭情况;
需求分析:这次实训做的是⼀个简单的智能家居控制灯,能实现PC机控制灯,并且实时查看灯的开与关状态,锻炼我们上位机对下位机的控制与下位机反馈信息到上位机
的能⼒,要求能熟炼使⽤IAR软件进⾏ZigBee编程和使⽤Microsoft Visual Studio
进⾏C#界⾯的开发。
知识点整理:(1)ZigBee按键控制LED灯程序的运⽤;
(2)ZigBee接收串⼝发送来的数据识别并做处理;
(3)ZigBee发送串⼝数据函数的调⽤;
(4)C#串⼝部分如串⼝号,波特率,检验位的设定;
(5)C#接收到串⼝数据并处理,C#发送串⼝数据;
遇到的难题:(1)ZigBee使⽤到的串⼝中断和按键中断两个中断,经常使得功能不稳定;
(2)C#串⼝接收到的数据可以调⽤显⽰但⽆法识别;
(3)C#的接收后显⽰和发送出现线程经常出错,⽆法在⼀个元件实现实时LED 灯状态;
(4)程序整合的过程经常出现⽆法兼顾两个程序原来的功能。
部分问题处理办法:
下位机ZigBee:
if(KEY1==1)
{
Delay(25000);
} 注:按键的简单去抖
if(KEY1==1)
{
KeyTouchtimes++;
}
if(KeyTouchtimes ==1)
{
UartTX_Send_String(Txdata,r);
RLED = 0;
KeyTouchtimes =2;
}
if(KeyTouchtimes ==3)
{
UartTX_Send_String(Txdata2,r);
RLED = 1;
KeyTouchtimes =0;
}
注:按键每次按下KeyTouchtimes加1,当1状态时关LED灯并且发送Txdata数组到上位机同时⾃⾝跳转到状态2;当3状态时开LED灯并且发送Txdata2数组到上位机同时⾃⾝跳转到0;这样写可以保证每次按键按下时LED灯会取反并且每次状态改变时把状态通过数组发送到上位机。
●上位机C#整体效果图:
●
上位机显⽰灯状态图:
private void button2_Click(object sender, EventArgs e)
{
mySerialPort.Write("A1#");
pictureBox1.Image = pictureBox3.Image;
}
private void button3_Click(object sender, EventArgs e)
{
mySerialPort.Write("A0#");
pictureBox1.Image = pictureBox2.Image;
}
当C#界⾯按下关灯按键时会发送A0#命令到ZigBee实现关灯命令同时把关灯图⽚付值到显⽰见⾯;当C#界⾯按下开灯按键时会发送A1#命令到ZigBee实现关灯命令同时把开灯图⽚付值到显⽰见⾯;
ZigBee接收C#命令程序:
1.if(RXTXflag == 1) //接收状态
2.{
3.if( temp != 0)
4.{
5.if((temp!='#')&&(datanumber<3))
6.{ //’#‘被定义
为结束字符
7.//最多能接收3
个字符
8.Recdata[datanumber++] = temp;
9.}
10.else
11.{
12.RXTXflag = 3; //进⼊改变⼩
灯的程序
13.}
14.if(datanumber == 3)RXTXflag = 3;
15.temp = 0;
16.}
17.}
18.if(RXTXflag == 3)
19.{
20.
21.if(Recdata[0]=='A')
22.{
23.if(Recdata[1]=='0')
24.{
25.RLED = 0;
26.YLED = 1;
27.GLED = 1; // A0# 关所
有LED
28.}
29.else
30.{
31.RLED = 1;
32.YLED = 1;
33.GLED = 1; // A1# 开所
有LED
34.}
35.}
注:每次收到数据是以#号结束字符的判断并识别到接收的数据为A0#时关RLED灯,识别到接收的数据为A1#时开RLED灯。
C#接收来⾃EB板程序如下:
Private void mySerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string text = string.Empty;
int size = sp.BytesToRead;
if (size % 2 == 0) 判断字节数是否是偶数
{
pictureBox1.Image = pictureBox2.Image;
}
else
{
pictureBox1.Image = pictureBox3.Image;
}
totalReceivedBytes += size;
this.Invoke(UpdateTextHandler, text);
}
当ZigBee按键按下时会发送Txdata数组或者Txdata2数组,均为⼀个字节,C#接受计算接收到的字节为奇偶判断此时是发送开灯命令还是关灯命令,并把开灯或者关灯图⽚附值到显⽰区。
实训总结
本次ZigBee实训任务让我重新学习了⼀次C#有关知识内容,实训过程中遇到很多问题,⽐如在CC2530单⽚机中如何去使⽤在⼀个中断响应两个不同事件,结果⼲扰很严重,能实现按键控制灯的亮灭和发送数据,就不能在实现C#界⾯发送数据给CC2530单⽚机,最后只能采⽤按键中断解决中断冲突问题,还有问题就是按下EB板按键时发送的数据不稳定,在这个问题上团队⼒量很重,最后经过我们三个的努⼒把这个问题也解决了,在⽼师指导下解决C#接收EB板的数据后C#界⾯的亮灯和灭灯图⽚的切换,其他问题都不是很⼤......
每次实训我深刻地知道了,实践源于真知,⽽只有更好更牢固掌握知识,多想多问多查,学会⾃⼰上⽹找资料,才能在实践中有较⼤的收获,同时团队解决问题能⼒远⽐个⼈的强,巩固了专业知识,发现了许多不⾜,明⽩了专业重⼼所在,专业运⽤于何处。
对于⾃⼰专业知识掌握不扎实,缺乏独⽴思考探索的意识等等缺点,我将在今后的学习与⼯作中不断加以改正,认真学好专业知识,以求真正地将理论运⽤于实践,⽤实践指导理论。