将读取传感器作为按摩发送到汇集节点

时间:2017-07-30 13:34:11

标签: c simulation contiki

我正在使用Cooja中的if let index = MenuViewController.subjectsArray.indexOf("Matematica") { self.subjectsMenu.selectRow(index, inComponent: 0, animated: true) } upd-sink.c udp-sender.c路径示例。我希望发送方mote将其传感器数据发送到接收器。在contiki/examples/ipv6/rpl-collect代码中,有一个名为udp-sender.c的{​​{1}},此struct有一个名为msg的数据字段,类型为struct。我想把我的阅读传感器放在msg中并发送到接收器。我该怎么做?我有一个感应温度的程序。我想将msg变量作为按钮发送到接收器。我想在Cooja中模拟这个网络。

传感器程序:

struct collect_view_data_msg

s计划的功能PROCESS(sensor_acq_process,"Sensor Acquisition"); AUTOSTART_PROCESSES(&sensor_acq_process); PROCESS_THREAD(sensor_acq_process,ev,data) { static struct etimer et; static int val; static float s = 0; static int dec; static float frac; PROCESS_BEGIN(); printf("Starting Sensor Example.\n"); while(1) { etimer_set(&et, CLOCK_SECOND * 2); SENSORS_ACTIVATE(sht11_sensor); PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et)); val = sht11_sensor.value(SHT11_SENSOR_TEMP); if(val != -1) { s = ((0.01*val) - 39.60); dec = s; frac = s - dec; printf("\nTemperature=%d.%02u C (%d)\n", dec, (unsigned int)(frac * 100),val); } etimer_reset(&et); SENSORS_DEACTIVATE(light_sensor); SENSORS_DEACTIVATE(sht11_sensor); } //end of while PROCESS_END(); }

collect-common-send

1 个答案:

答案 0 :(得分:0)

您在Cooja中使用哪个平台? (最有可能是sky。)

  1. 如果平台为sky,则传感器读数已包含在收集视图消息中。如果不是,则可以使用apps/collect-view/作为基础,轻松扩展collect-view-template.c下的收集视图代码。
  2. 请勿使用floating point numbers on embedded systems
  3. 如果您真的知道自己在做什么,想要使用浮点数,并希望获得ASCII格式的数据,请在struct collect_view_data_msg char数组中创建新字段,以及{ {1}}该字段中传感器的值。
  4. 作为次要评论,不需要此代码:

    snprintf

    如上所述,SENSORS_ACTIVATE(sht11_sensor); msg.msg->sensors[TEMP_SENSOR] = sht11_sensor.value(SHT11_SENSOR_TEMP); ... SENSORS_DEACTIVATE(sht11_sensor); 已经被阅读并包含在收集视图应用中的消息中。