TR0 = 0x01;
ADCCON3 |= 0x0e;
ADCCON3 &= 0x3f;
ADCCON3 |= 0x30;
ADCCON1 |= 0x30;
ADCCON1 |= 0x40;
while(!(ADCCON1 & 0x80));
adcvalue = (uint16) ADCL;
adcvalue |= (uint16) (ADCH << 8);
adcvalue = adcvalue >> 2;
T = adcvalue * 0.06229 - 303.3 - 25;
return T;
}
4.2片外气体传感器电压值采集
uint16 sensor_val;
float volt;
float get_VL(void){
sensor_val = get_adc();
volt = (sensor_val * 3.3) / 8192;
return volt;
}
uint16 get_adc()
{
uint32 value;
adc_init();
ADCIF = 0;
ADCCON3 = (0x80 | 0x10 | 0x00);
while(!ADCIF);
value = ADCL;
value = (((uint16)ADCH) << 8);
return (uint16) value;
}
void adc_init()
{
APCFG |= 1;
P0SEL |= (1 << (0));
P0DIR &= (1 << (0));
}
4.3无线传感器网络建立
void SampleApp_SendPeriodicMessage( void ) //发送周期信息
{ //调用AF_DataRequest()函数将数据无线广播出去
if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc, //发送目的地址+端点地址和传送模式
SAMPLEAPP_PERIODIC_CLUSTERID, //被Profile指定有效的集群号
1, //发送数据长度
(uint8*)&SampleAppPeriodicCounter, //发送数据的缓冲区
&SampleApp_TransID, //任务ID号
AF_DISCV_ROUTE, //有效位掩码的发送选项 传送跳数通常设置为AF_DEFAULT_RADIUS
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
}
else
{
// Error occurred in request to send.
}
}
4.4无线数据发送与接收
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) //无线数据接收函数
{
uint16 flashTime;
SAMEPLEAPP_TEMP temperatuer;
uint8 asc_16[16]={‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,‘A’,‘B’,‘C’,‘D’,‘E’,‘F’};
uint16 temp;
switch ( pkt->clusterId ) //判断簇ID
{
case SAMPLEAPP_PERIODIC_CLUSTERID:
break;
case SAMPLEAPP_FLASH_CLUSTERID: //收到组播数据
osal_memcpy(&temperatuer,pkt->cmd.Data,sizeof(temperatuer));
HalUARTWrite(0,(uint8*)&temperatuer,sizeof(temperatuer));
HalUARTWrite(0,“\n”,1);
break;
case SAMPLEAPP_SERIAL_CLUSTERID: //无线串口发来的数据
osal_memcpy(&temperatuer,pkt->cmd.Data,sizeof(temperatuer));
HalUARTWrite(0, &pkt->cmd.Data[0],pkt->cmd.DataLength); //把无线串口数据上传PC机显示
HalUARTWrite(0,“\n”,1); //发送换行符
break;
case SAMPLEAPP_P2P_CLUSTERID: //接收到单播数据
HalUARTWrite(0,“Rx:”,3); //提示接收到单播数据
HalUARTWrite(0,pkt->cmd.Data,pkt->cmd.DataLength); //串口输出接收到的数据
HalUARTWrite(0,“\n”,1);
temp=pkt->srcAddr.addr.shortAddr;
if(pkt->cmd.Data[0]==1) //路由器
HalUARTWrite(0,“ROUTER ShortAddr:0x”,20); //提示接收到数据
if(pkt->cmd.Data[0]==2) //终端
HalUARTWrite(0,“ENDDEVICE ShortAddr:0x”,25); //提示接收到数据
HalUARTWrite(0,&asc_16[temp/4096],1);
HalUARTWrite(0,&asc_16[temp%4096/256],1);
HalUARTWrite(0,&asc_16[temp%256/16],1);
HalUARTWrite(0,&asc_16[temp%16],1); //将短地址分解为ASCII码
HalUARTWrite(0,“\n”,1);
break;
4.5协调器数据串口发送
(void)shift; // Intentionally unreferenced parameter
if ( keys & HAL_KEY_SW_6 )
{
/* This key sends the Flash Command is sent to Group 1.
* This device will not receive the Flash Command from this
* device (even if it belongs to group 1).
*/
#if defined(ZDO_COORDINATOR) //协调器只接收数据
#else
SampleApp_SendFlashMessage(0); //路由器和终端才发送数据 以组播方式发送
#endif
SampleApp_SendFlashMessage( SAMPLEAPP_FLASH_DURATION );
}
五、项目实现效果
六、项目总结
通过这次的物联网期末项目综合实验,我们更加的深入了解ZIGBEE物联网编程,同时也认识很多模块,比如温度光照传感器模块,还有更加的了解熟练C#窗口编程,还有对IAR软件的熟练,还有对VS软件更加的熟练。
然后你就开始装逼了,这个项目说难不难说简单不简单,在完成这个项目经历了九九八十一难,刚开始时,遇到了许多困难合问题。比如遇到了就是串口助手显示不出,电压和温度,还有上位机,窗口编程,打开不了,就是,接收不到数据,等等。
通过这次实验我,明白了人多力量大的道理。单独的通过自己是完成不了这个实验的,可能是我的实力有限,但是我有好的队友,我们分工合作,我负责软件编程,有人负责硬件,也有人负责做PPT…,分工明确很顺利进行,很快就完成了。我们一起这样才能更快更好的解决问题,总的来说,这次的收获还是非常不错的。
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!
04491)]
[外链图片转存中…(img-NIAr90Xp-1715768604491)]
[外链图片转存中…(img-VaIjEvLx-1715768604492)]
[外链图片转存中…(img-UBa1kuof-1715768604492)]
[外链图片转存中…(img-I1GaSRNj-1715768604493)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!