物联网试验报告.docx
《物联网试验报告.docx》由会员分享,可在线阅读,更多相关《物联网试验报告.docx(11页珍藏版)》请在冰豆网上搜索。
物联网试验报告
.
物联网与信息系统前沿
实验报告
1120310217
邵孟旋.
.
实验二
1.分析/examples/hello-world/下的程序
原码如下:
宏完成两个功能:
PROCESS函数指该函数是进程的执行体,即进程的thread声明一个函数,
(1)
针所指的函数定义一个进程结构体
(2)
Contiki宏实际上是定义一个指针数组,AUTOSTART_PROCESSES存放.
.
系统运行时需自动启动的进程。
PT_THREAD宏用于声明一个protothread,即进程的执行主体。
PROCESS_BEGIN()
进程的主体函数从这里开始
PROCESS_END()
进程的主体函数从这里结束
2.实验过程及结果
编译hello_world
仿真节点的运行
.
.
实验三
1.程序分析:
UDPsever
初始化RPLDAG
//检查ADDR_MANUAL是否已经成功设置
uip_ds6_addr_add(&ipaddr,0,ADDR_MANUAL);
root_if=uip_ds6_addr_lookup(&ipaddr);
if(root_if!
=NULL){
rpl_dag_t*dag;
//将服务器的IP地址作为初始DAG的根
dag
=
rpl_set_root(RPL_DEFAULT_INSTANCE,(uip_ip6addr_t
*)&ipaddr);
uip_ip6addr(&ipaddr,0xaaaa,0,0,0,0,0,0,0);
.
.
rpl_set_prefix(dag,&ipaddr,64);
PRINTF(createdanewRPLdag\n);
}else{
PRINTF(
ailedtocreateanewRPLDAG\n);
}
创建UDP连接
//向客户端的端口创建新的UDP连接
server_conn=udp_new(NULL,UIP_HTONS(UDP_CLIENT_PORT),
NULL);
if(server_conn==NULL){
PRINTF(NoUDPconnectionavailable,exitingtheprocess!
\n);
PROCESS_EXIT();
}
udp_bind(server_conn,UIP_HTONS(UDP_SERVER_PORT));
PRINTF(Createdaserverconnectionwithremoteaddress);
PRINT6ADDR(&server_conn->ripaddr);
PRINTF(
local/remote
port
%u/%u\n,
UIP_HTONS(server_conn->lport),
UIP_HTONS(server_conn->rport));
.
.
包的接受和处理
while
(1){
PROCESS_YIELD();
//如果有包
if(ev==tcpip_event){
tcpip_handler();
}elseif(ev==sensors_event&&data==&button_sensor){
PRINTF(Initiaingglobalrepair\n);
rpl_repair_root(RPL_DEFAULT_INSTANCE);
}
}
//如果有包,调用这个函数
staticvoid
tcpip_handler(void)
{
char*appdata;
if(uip_newdata()){
appdata=(char*)uip_appdata;
appdata[uip_datalen()]=0;
//printthedataofpacket
PRINTF(DATArecv'%s'from,appdata);
.
.
PRINTF(%d,
UIP_IP_BUF->srcipaddr.u8[sizeof(UIP_IP_BUF->srcipaddr.u8)-1]);
PRINTF(\
);
}
UDPClient:
建立UDP连接
/*远程主机的新连接*/
client_conn=udp_new(NULL,UIP_HTONS(UDP_SERVER_PORT),
NULL);
if(client_conn==NULL){
PRINTF(NoUDPconnectionavailable,exitingtheprocess!
\n);
PROCESS_EXIT();
}
udp_bind(client_conn,UIP_HTONS(UDP_CLIENT_PORT));
PRINTF(Createdaconnectionwiththeserver);
PRINT6ADDR(&client_conn->ripaddr);
PRINTF(local/remoteport%u/%u\n,
UIP_HTONS(client_conn->lport),UIP_HTONS(client_conn->rport));
发包
//根据SEND_INTERVAL设置时间间隔
.
.
etimer_set(&periodic,SEND_INTERVAL);
while
(1){
PROCESS_YIELD();
if(ev==tcpip_event){
tcpip_handler();
}
//每个时间间隔就发一个包
if(etimer_expired(&periodic)){
etimer_reset(&periodic);
ctimer_set(&backoff_timer,SEND_TIME,send_packet,NULL);
staticvoid
send_packet(void*ptr)
{
staticintseq_id;
charbuf[MAX_PAYLOAD_LEN];
seq_id++;
PRINTF(DATAsendto%d'Hello%d'\n,
server_ipaddr.u8[sizeof(server_ipaddr.u8)-1],seq_id);
sprintf(buf,Hello%dfromtheclient,seq_id);
//通过client_conn向UDP服务器发包
uip_udp_packet_sendto(client_conn,buf,strlen(buf),
&server_ipaddr,
.
.
UIP_HTONS(UDP_SERVER_PORT));
}
2.实验过程及结果:
编译/examples/ipv6/rpl-udp目录下的udp-server.c和udp-client.c
运行Cooja仿真环境
.
.
3.问题:
1.问:
节点获取ip地址了吗?
是什么?
获取了IP地址,为fe80:
0000:
:
0212:
7408:
0008:
0808;
2.节点之间有通讯吗?
有通讯,因为有DATAsend
3.udp-server收到其他节点发给它的packet了吗?
收到了,因为有DATArecv
4.节点执行dutycycle了吗?
节点执行了dutycircle
实验收获及问题
通过本次实验,加深了对物联网系统的理解,激发了我对物联网的兴.
.
趣,给我打开了一扇崭新的大门,让我看到了未来世界的无线可能。
.