Example #1
0
void mcu_main()
{
	int version = api_version();
	debug_print(DBG_INFO, "API version: %d.%d\n", version/100, version%100);

	gpio_setup(GPIO_DHT, OUTPUT);
	gpio_write(GPIO_DHT, HIGH);

	/* do not send instructions within 1S after power on to pass the unstable state */
	mcu_sleep(100);

	uint8_t data[DHT_DATA_LEN];
	while (1) {
		int rc;
		uint8_t humidity, temperature;
		if ((rc = dht11_read(GPIO_DHT, data, sizeof(data))) == DHT_SUCCESS) {
			humidity = data[0], temperature = data[2];
			debug_print(DBG_INFO, "Humidity: %d%, Temperature: %d C\n", humidity, temperature);
//			debug_print(DBG_INFO, "%d %d %d %d %d\n",
//						data[0], data[1], data[2], data[3], data[4]);
		} else {
			debug_print(DBG_ERROR, "dht11_read() error [%d]\n", rc);
		}

		unsigned char buf[LEN_IPCBUF];
		if ((rc = host_receive(buf, sizeof(buf))) > 0 && buf[0] == '?') {
			rc = mcu_snprintf((char*)buf, LEN_IPCBUF, "RH=%d,T=%d\n", humidity, temperature);
			host_send(buf, rc);
		}

		mcu_sleep(300);
	}
}
Example #2
0
static v7_val_t DHT11_read(struct v7 *v7) {
  int pin, temp, rh;
  v7_val_t pinv = v7_arg(v7, 0), result;

  if (!v7_is_number(pinv)) {
    printf("non-numeric pin\n");
    return v7_create_undefined();
  }
  pin = v7_to_number(pinv);

  if (!dht11_read(pin, &temp, &rh)) {
    return v7_create_null();
  }

  result = v7_create_object(v7);
  v7_own(v7, &result);
  v7_set(v7, result, "temp", 4, 0, v7_create_number(temp));
  v7_set(v7, result, "rh", 2, 0, v7_create_number(rh));
  v7_disown(v7, &result);
  return result;
}
Example #3
0
ICACHE_FLASH_ATTR
static v7_val_t DHT11_read(struct v7 *v7, v7_val_t this_obj, v7_val_t args) {
  int pin, temp, rh;
  v7_val_t pinv = v7_array_get(v7, args, 0), result;

  if (!v7_is_double(pinv)) {
    printf("non-numeric pin\n");
    return v7_create_undefined();
  }
  pin = v7_to_double(pinv);

  if (!dht11_read(pin, &temp, &rh)) {
    return v7_create_null();
  }

  result = v7_create_object(v7);
  v7_set(v7, result, "temp", 4, 0, v7_create_number(temp));
  v7_set(v7, result, "rh", 2, 0, v7_create_number(rh));
  /* prevent the object from being potentially GCed */
  v7_set(v7, args, "_tmp", 4, 0, result);
  return result;
}
Example #4
0
static void hum_temp_complete_read(struct task* task) {
  uint8_t dht11_data[5];
  result_t result = dht11_read((struct gpio*) task->data, dht11_data);
  
  if (result == RESULT_SUCCESS) {
    struct hum_temp_reading reading = { dht11_data[0], dht11_data[2] };
    current_read_event.reading = reading;
  } else {
    current_read_event.reading = (struct hum_temp_reading) { 0 };    
  }
  event_fire_event((event_t*) &current_read_event);
}

static bool on_hum_temp_reading(event_t* event) {
  struct hum_temp_read_event* read_event = (struct hum_temp_read_event*) event;
  struct hum_temp_reading current_reading = read_event->reading;
  if (current_reading.temperature == 0 && current_reading.humidity == 0) {
    LOG_ERROR("No humidity / temperature reading received\n", "");
  }

  push_sample(&humidity_20_sec_buffer, current_reading.humidity);
  push_sample(&humidity_10_min_buffer, current_reading.humidity);

  push_sample(&temperature_20_sec_buffer, current_reading.temperature);
  push_sample(&temperature_10_min_buffer, current_reading.temperature);

  return false;
}

uint16_t hum_temp_load(void) {
  uint16_t pos = 0;
  for (uint8_t i = 0; i < ARRAY_SIZE(sample_buffers); i++) {
    sample_buffer_init(sample_buffers[i], sample_buffers[i]->samples, sample_buffers[i]->size);
    eeprom_read_buffer(sample_buffers[i], pos);
    pos += sample_buffers[i]->count + 2;
  }
  return pos;
}
Example #5
0
static enum v7_err DHT11_read(struct v7 *v7, v7_val_t *res) {
  enum v7_err rcode = V7_OK;
  int pin, temp, rh;
  v7_val_t pinv = v7_arg(v7, 0);

  if (!v7_is_number(pinv)) {
    printf("non-numeric pin\n");
    *res = v7_create_undefined();
    goto clean;
  }
  pin = v7_to_number(pinv);

  if (!dht11_read(pin, &temp, &rh)) {
    *res = v7_create_null();
    goto clean;
  }

  *res = v7_create_object(v7);
  v7_set(v7, *res, "temp", 4, 0, v7_create_number(temp));
  v7_set(v7, *res, "rh", 2, 0, v7_create_number(rh));

clean:
  return rcode;
}