  */
 
 #ifdef NEURITE_ENABLE_USER
-Ticker ticker_user;
-
-void ticker_user_task(void)
-{
+
+#define USER_LOOP_INTERVAL 1000
+static bool b_user_loop_run = false;
+
+void neurite_user_loop(void)
+{
+	static uint32_t prev_time = 0;
+	if (b_user_loop_run == false)
+		return;
 	/* do something as in a periodically loop */
+	if ((millis() - prev_time) < USER_LOOP_INTERVAL)
+		return;
+	else
+		prev_time = millis();
 #if 0
 	struct neurite_data_s *nd = &g_nd;
 	static int adc_prev = 0;

			mqtt_cli.publish(nd->cfg.topic_to, (const char *)payload_buf);

			start_ticker_led_breath(nd);
			start_ticker_worker(nd);
			start_ticker_mon(nd);
			CMD_SERIAL.println(FPSTR(STR_READY));
			log_dbg("heap free: %d\n\r", ESP.getFreeHeap());

				analogWrite(14, 1023);
	}
	char *token = NULL;
	char *msg = (char *)malloc(MQTT_MSG_LEN);
	__bzero(msg, sizeof(msg));
	for (int i = 0; i < length; i++)
		msg[i] = payload[i];
