static void send_update(size_t pos, char *buf) { uint32_t pressure; uint16_t rawtemp, rawhum; int temp, hum, temp_abs, hum_abs, pressure_abs; uint8_t status; tcs37727_data_t light_data; hdc1000_read(&th_dev, &rawtemp, &rawhum); hdc1000_convert(rawtemp, rawhum, &temp, &hum); temp_abs = temp / 100; hum_abs = hum / 100; temp -= temp_abs * 100; hum -= hum_abs * 100; mpl3115a2_read_pressure(&p_dev, &pressure, &status); pressure_abs = pressure / 100000; pressure -= pressure_abs * 100000; //mpl3115a2_read_temp(&p_dev, &temp); tcs37727_read(&light_dev, &light_data); pos += sprintf(&buf[pos], "{\"n\":\"s:temp\", \"u\":\"°C\", \"v\":\"%2i.%03i\"},", temp_abs, temp); pos += sprintf(&buf[pos], "{\"n\":\"s:hum\", \"u\":\"%%RH\", \"v\":\"%2i.%03i\"},", hum_abs, hum); pos += sprintf(&buf[pos], "{\"n\":\"s:pres\", \"u\":\"bar\", \"v\":\"%2i.%03i\"},", pressure_abs, (unsigned int) pressure); pos += sprintf(&buf[pos], "{\"n\":\"s:rgb\", \"u\":\"RGB\", \"v\":\"[%"PRIu32", %"PRIu32", %"PRIu32"]\"}]", light_data.red, light_data.green, light_data.blue); hdc1000_startmeasure(&th_dev); send_coap_post((uint8_t *)buf, pos); }
int main(void) { hdc1000_t dev; uint16_t rawtemp, rawhum; int temp, hum; puts("HDC1000 Temperature and Humidity Sensor driver test application\n"); printf("Initializing HDC1000 sensor at I2C_%i... ", TEST_HDC1000_I2C); if (hdc1000_init(&dev, TEST_HDC1000_I2C, TEST_HDC1000_ADDR) == 0) { puts("[OK]\n"); } else { puts("[Failed]"); return -1; } while (1) { if (hdc1000_startmeasure(&dev)) { puts("Start measure failed."); return -1; } vtimer_usleep(HDC1000_CONVERSION_TIME); hdc1000_read(&dev, &rawtemp, &rawhum); printf("Raw data T: %5i RH: %5i\n", rawtemp, rawhum); hdc1000_convert(rawtemp, rawhum, &temp, &hum); printf("Data T: %d RH: %d\n", temp, hum); vtimer_usleep(SLEEP); } return 0; }
/** * @brief Measures the temperature and humitity with a HDC1000. * * @param[out] temp the measured temperature in degree celsius * 100 * @param[out] hum the measured humitity in % * 100 */ void hdc1000_measure(int *temp, int *hum) { uint16_t rawtemp; uint16_t rawhum; if (hdc1000_startmeasure(&hdcDev)) { puts("[sensors] ERROR: HDC1000 starting measure failed"); return; } // wait for the measurment to finish xtimer_usleep(HDC1000_CONVERSION_TIME); //26000us hdc1000_read(&hdcDev, &rawtemp, &rawhum); hdc1000_convert(rawtemp, rawhum, temp, hum); printf("[sensors] INFO: HDC1000 Data T: %d RH: %d\n", *temp, *hum); }
int main(void) { #ifdef WITH_SHELL /* initialize message queue */ msg_init_queue(_main_msg_q, Q_SZ); #endif eui64_t iid; // uint16_t chan = 15; netopt_enable_t acks = NETOPT_DISABLE; kernel_pid_t ifs[GNRC_NETIF_NUMOF]; gnrc_netif_get(ifs); gnrc_netapi_set(ifs[0], NETOPT_AUTOACK, 0, &acks, sizeof(acks)); // gnrc_netapi_set(ifs[0], NETOPT_CHANNEL, 0, &chan, sizeof(chan)); ipv6_addr_from_str(&dst_addr, "2001:affe:1234::1"); // ipv6_addr_from_str(&dst_addr, "fd38:3734:ad48:0:211d:50ce:a189:7cc4"); /* initialize senml payload */ gnrc_netapi_get(ifs[0], NETOPT_IPV6_IID, 0, &iid, sizeof(eui64_t)); initial_pos = sprintf(&p_buf[initial_pos], "[{\"bn\":\"urn:dev:mac:"); initial_pos += sprintf(&p_buf[initial_pos], "%02x%02x%02x%02x%02x%02x%02x%02x", iid.uint8[0], iid.uint8[1], iid.uint8[2], iid.uint8[3], iid.uint8[4], iid.uint8[5], iid.uint8[6], iid.uint8[7]); initial_pos += sprintf(&p_buf[initial_pos], "\"},"); /* initialize sensors */ hdc1000_init(&th_dev, HDC1000_I2C, HDC1000_ADDR); hdc1000_startmeasure(&th_dev); mpl3115a2_init(&p_dev, MPL3115A2_I2C, MPL3115A2_ADDR, MPL3115A2_OS_RATIO_DEFAULT); mpl3115a2_set_active(&p_dev); tcs37727_init(&light_dev, TCS37727_I2C, TCS37727_ADDR, TCS37727_ATIME_DEFAULT); tcs37727_set_rgbc_active(&light_dev); #ifdef WITH_SHELL thread_create(beac_stack, sizeof(beac_stack), PRIO, THREAD_CREATE_STACKTEST, beaconing, NULL, "beaconing"); char line_buf[SHELL_DEFAULT_BUFSIZE]; shell_run(shell_commands, line_buf, SHELL_DEFAULT_BUFSIZE); #else beaconing(NULL); #endif return 0; }