我在使用Z1 motes和ZIGLET Z001(温度和湿度)的contiki2.7(我使用InstantContiki)中遇到了问题。 我在示例/ z1目录中尝试了代码“test-sht11.c”来获取温度和湿度,但是我得到了错误的结果:
Rime started with address 227.15
MAC e3:0f:00:00:00:00:00:00 Contiki 2.7 started. Node id is set to 4067.
CSMA ContikiMAC, channel check rate 8 Hz, radio channel 26
Starting 'SHT11 test'
Temperature: 615 degrees Celsius
Rel. humidity: 2650%
Temperature: 615 degrees Celsius
Rel. humidity: 2650%
我看到I2c驱动程序必须被禁用(http://sourceforge.net/p/contiki/mailman/message/29682840/)但它仍然不起作用,我有相同的结果。
代码:
#include "contiki.h"
#include "dev/sht11.h"
#include <stdio.h>
PROCESS(test_sht11_process, "SHT11 test");
AUTOSTART_PROCESSES(&test_sht11_process);
PROCESS_THREAD(test_sht11_process, ev, data)
{
static struct etimer et;
static unsigned rh;
PROCESS_BEGIN();
i2c_disable();
sht11_init();
for (etimer_set(&et, CLOCK_SECOND);; etimer_reset(&et)) {
PROCESS_YIELD();
printf("Temperature: %u degrees Celsius\n",
(unsigned) (-39.60 + 0.01 * sht11_temp()));
rh = sht11_humidity();
printf("Rel. humidity: %u%%\n",
(unsigned) (-4 + 0.0405*rh - 2.8e-6*(rh*rh)));
}
PROCESS_END();
}
我非常确定这不是硬件问题(我尝试使用不同的ZIG001和不同的Z1微粒)。 谢谢你的帮助,我绝望了...... Jibus。
答案 0 :(得分:0)
存储库负责人建议使用SHT25而不是SHT11。这些是可能不存在的新文件,如果您卡在旧的contiki上,那么您必须手动获取它们。如果您切换到较新的版本,您将获得它们。
如果您只是将文件(.c和.h)放在旧的sht11旁边(不更新contiki),不要忘记在Makefile中添加sht25.c(在sht11.c之后)。
使用新版本的传感(参见Z1的新示例):
PROCESS_THREAD(test_sht25_process, ev, data)
{
int16_t temperature, humidity;
PROCESS_BEGIN();
SENSORS_ACTIVATE(sht25);
while(1) {
etimer_set(&et, CLOCK_SECOND);
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
temperature = sht25.value(SHT25_VAL_TEMP);
printf("Temperature %d.%d ºC\n", temperature / 100, temperature % 100);
humidity = sht25.value(SHT25_VAL_HUM);
printf("Humidity %d.%d %RH\n", humidity / 100, humidity % 100);
}
PROCESS_END();
}
对于像我这样的Z1内置温度传感器,也不要使用sht11,只能用于连接它的zigglet(不适用于OP,但可能会帮助其他人)。 ..