I wrote this a long time ago, while sick.
This commit is contained in:
		
							parent
							
								
									f39139f910
								
							
						
					
					
						commit
						7f28aa39f0
					
				
					 1 changed files with 155 additions and 9 deletions
				
			
		
							
								
								
									
										164
									
								
								main/main.c
									
										
									
									
									
								
							
							
						
						
									
										164
									
								
								main/main.c
									
										
									
									
									
								
							| 
						 | 
					@ -15,11 +15,16 @@
 | 
				
			||||||
#include "driver/spi_master.h"
 | 
					#include "driver/spi_master.h"
 | 
				
			||||||
#include "esp_system.h"
 | 
					#include "esp_system.h"
 | 
				
			||||||
#include "esp_log.h"
 | 
					#include "esp_log.h"
 | 
				
			||||||
 | 
					#include "esp_console.h"
 | 
				
			||||||
 | 
					#include "esp_vfs_dev.h"
 | 
				
			||||||
#include "nvs_flash.h"
 | 
					#include "nvs_flash.h"
 | 
				
			||||||
#include "esp_http_client.h"
 | 
					#include "esp_http_client.h"
 | 
				
			||||||
 | 
					#include "driver/uart.h"
 | 
				
			||||||
#include "driver/mcpwm.h"
 | 
					#include "driver/mcpwm.h"
 | 
				
			||||||
#include "soc/mcpwm_reg.h"
 | 
					#include "soc/mcpwm_reg.h"
 | 
				
			||||||
#include "soc/mcpwm_struct.h"
 | 
					#include "soc/mcpwm_struct.h"
 | 
				
			||||||
 | 
					#include "linenoise/linenoise.h"
 | 
				
			||||||
 | 
					#include "argtable3/argtable3.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "esp32-wifi-manager.h"
 | 
					#include "esp32-wifi-manager.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,10 +33,19 @@
 | 
				
			||||||
#define BASE_URL "http://192.168.0.1/"
 | 
					#define BASE_URL "http://192.168.0.1/"
 | 
				
			||||||
#define CMD_BEEP "cmd=audio resplay 0 1 3\n"
 | 
					#define CMD_BEEP "cmd=audio resplay 0 1 3\n"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define CONFIG_SERVO_ENABLE (0)
 | 
				
			||||||
 | 
					#define CONFIG_SHOOT_DELAY_MS (30000)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static uint8_t id;
 | 
					static uint8_t id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EventGroupHandle_t wm_event_group;
 | 
					EventGroupHandle_t wm_event_group;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct {
 | 
				
			||||||
 | 
					  struct arg_int *value; // how fast it will move in uS
 | 
				
			||||||
 | 
					  struct arg_int *duration; // for how long it will move
 | 
				
			||||||
 | 
					  struct arg_end *end;
 | 
				
			||||||
 | 
					} servo_args;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esp_err_t _http_event_handle(esp_http_client_event_t *evt) {
 | 
					esp_err_t _http_event_handle(esp_http_client_event_t *evt) {
 | 
				
			||||||
  //ESP_LOGI(TAG, "Returning request for %s", (char*)evt->user_data);
 | 
					  //ESP_LOGI(TAG, "Returning request for %s", (char*)evt->user_data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -84,6 +98,8 @@ void ping() {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void shoot() {
 | 
					void shoot() {
 | 
				
			||||||
 | 
					  ESP_LOGI(TAG, "shooting");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  esp_http_client_config_t config = {
 | 
					  esp_http_client_config_t config = {
 | 
				
			||||||
    .url = "http://192.168.0.1/v1/camera/shoot",
 | 
					    .url = "http://192.168.0.1/v1/camera/shoot",
 | 
				
			||||||
    .method = HTTP_METHOD_POST,
 | 
					    .method = HTTP_METHOD_POST,
 | 
				
			||||||
| 
						 | 
					@ -126,20 +142,24 @@ void loop() {
 | 
				
			||||||
  xEventGroupWaitBits(wm_event_group, WIFI_CONNECTED, false, true, portMAX_DELAY);
 | 
					  xEventGroupWaitBits(wm_event_group, WIFI_CONNECTED, false, true, portMAX_DELAY);
 | 
				
			||||||
  ping();
 | 
					  ping();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  vTaskDelay(1000 / portTICK_PERIOD_MS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  while(true) {
 | 
					  while(true) {
 | 
				
			||||||
    shoot();
 | 
					    shoot();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vTaskDelay(3000 / portTICK_PERIOD_MS);
 | 
					    if(CONFIG_SERVO_ENABLE) {
 | 
				
			||||||
 | 
					      vTaskDelay(3000 / portTICK_PERIOD_MS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    mcpwm_set_duty_in_us(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_A, 1200);
 | 
					      mcpwm_set_duty_in_us(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_A, 1200);
 | 
				
			||||||
    vTaskDelay(100 / portTICK_PERIOD_MS);
 | 
					      vTaskDelay(200 / portTICK_PERIOD_MS);
 | 
				
			||||||
    mcpwm_set_duty_in_us(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_A, 1500);
 | 
					      mcpwm_set_duty_in_us(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_A, 1500);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vTaskDelay(5000 / portTICK_PERIOD_MS);
 | 
					    vTaskDelay(CONFIG_SHOOT_DELAY_MS / portTICK_PERIOD_MS);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void servo() {
 | 
					void pwm_init() {
 | 
				
			||||||
  mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0A, 21);
 | 
					  mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0A, 21);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  mcpwm_config_t pwm_config;
 | 
					  mcpwm_config_t pwm_config;
 | 
				
			||||||
| 
						 | 
					@ -149,12 +169,107 @@ void servo() {
 | 
				
			||||||
  pwm_config.counter_mode = MCPWM_UP_COUNTER;
 | 
					  pwm_config.counter_mode = MCPWM_UP_COUNTER;
 | 
				
			||||||
  pwm_config.duty_mode = MCPWM_DUTY_MODE_0;
 | 
					  pwm_config.duty_mode = MCPWM_DUTY_MODE_0;
 | 
				
			||||||
  mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config); //Configure PWM0A & PWM0B with above settings
 | 
					  mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config); //Configure PWM0A & PWM0B with above settings
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void servo() {
 | 
				
			||||||
 | 
					  ESP_LOGI(TAG, "value: %d duration: %d", servo_args.value->ival[0], servo_args.duration->ival[0]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  while(true) {
 | 
					  while(true) {
 | 
				
			||||||
    vTaskDelay(1000 / portTICK_PERIOD_MS);
 | 
					    mcpwm_set_duty_in_us(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_A, servo_args.value->ival[0]);
 | 
				
			||||||
 | 
					    vTaskDelay(servo_args.duration->ival[0] / portTICK_PERIOD_MS);
 | 
				
			||||||
 | 
					    mcpwm_set_duty_in_us(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_A, 1500);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    vTaskDelay(5000 / portTICK_PERIOD_MS);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool running = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int servo_start(int argc, char **argv) {
 | 
				
			||||||
 | 
					  int nerrors = arg_parse(argc, argv, (void**) &servo_args);
 | 
				
			||||||
 | 
					  if (nerrors != 0) {
 | 
				
			||||||
 | 
					    arg_print_errors(stderr, servo_args.end, argv[0]);
 | 
				
			||||||
 | 
					    return 1;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if(!running) {
 | 
				
			||||||
 | 
					    running = true;
 | 
				
			||||||
 | 
					    xTaskCreate(&servo, "servo",  4096, NULL, 6, NULL);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return ESP_OK;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void register_servo_cmd() {
 | 
				
			||||||
 | 
					  servo_args.value = arg_int0("v", "value", "<int>", "move value in us");
 | 
				
			||||||
 | 
					  servo_args.value->ival[0] = 1200;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  servo_args.duration = arg_int0("d", "duration", "<int>", "duration in ms");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  servo_args.end = arg_end(2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const esp_console_cmd_t start_cmd = {
 | 
				
			||||||
 | 
					    .command = "start",
 | 
				
			||||||
 | 
					    .help = "Starts the servo",
 | 
				
			||||||
 | 
					    .hint = NULL,
 | 
				
			||||||
 | 
					    .func = &servo_start,
 | 
				
			||||||
 | 
					    .argtable = &servo_args
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ESP_ERROR_CHECK( esp_console_cmd_register(&start_cmd) );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void initialize_console() {
 | 
				
			||||||
 | 
					  /* Disable buffering on stdin and stdout */
 | 
				
			||||||
 | 
					  setvbuf(stdin, NULL, _IONBF, 0);
 | 
				
			||||||
 | 
					  setvbuf(stdout, NULL, _IONBF, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* Minicom, screen, idf_monitor send CR when ENTER key is pressed */
 | 
				
			||||||
 | 
					  esp_vfs_dev_uart_set_rx_line_endings(ESP_LINE_ENDINGS_CR);
 | 
				
			||||||
 | 
					  /* Move the caret to the beginning of the next line on '\n' */
 | 
				
			||||||
 | 
					  esp_vfs_dev_uart_set_tx_line_endings(ESP_LINE_ENDINGS_CRLF);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* Configure UART. Note that REF_TICK is used so that the baud rate remains
 | 
				
			||||||
 | 
					   * correct while APB frequency is changing in light sleep mode.
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  const uart_config_t uart_config = {
 | 
				
			||||||
 | 
					    .baud_rate = CONFIG_CONSOLE_UART_BAUDRATE,
 | 
				
			||||||
 | 
					    .data_bits = UART_DATA_8_BITS,
 | 
				
			||||||
 | 
					    .parity = UART_PARITY_DISABLE,
 | 
				
			||||||
 | 
					    .stop_bits = UART_STOP_BITS_1,
 | 
				
			||||||
 | 
					    .use_ref_tick = true
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  ESP_ERROR_CHECK( uart_param_config(CONFIG_CONSOLE_UART_NUM, &uart_config) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* Install UART driver for interrupt-driven reads and writes */
 | 
				
			||||||
 | 
					  ESP_ERROR_CHECK( uart_driver_install(CONFIG_CONSOLE_UART_NUM,
 | 
				
			||||||
 | 
					        256, 0, 0, NULL, 0) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* Tell VFS to use UART driver */
 | 
				
			||||||
 | 
					  esp_vfs_dev_uart_use_driver(CONFIG_CONSOLE_UART_NUM);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* Initialize the console */
 | 
				
			||||||
 | 
					  esp_console_config_t console_config = {
 | 
				
			||||||
 | 
					    .max_cmdline_args = 8,
 | 
				
			||||||
 | 
					    .max_cmdline_length = 256,
 | 
				
			||||||
 | 
					    .hint_color = atoi(LOG_COLOR_CYAN)
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  ESP_ERROR_CHECK( esp_console_init(&console_config) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* Configure linenoise line completion library */
 | 
				
			||||||
 | 
					  /* Enable multiline editing. If not set, long commands will scroll within
 | 
				
			||||||
 | 
					   * single line.
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  linenoiseSetMultiLine(1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* Tell linenoise where to get command completions and hints */
 | 
				
			||||||
 | 
					  linenoiseSetCompletionCallback(&esp_console_get_completion);
 | 
				
			||||||
 | 
					  linenoiseSetHintsCallback((linenoiseHintsCallback*) &esp_console_get_hint);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* Set command history size */
 | 
				
			||||||
 | 
					  linenoiseHistorySetMaxLen(100);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void app_main() {
 | 
					void app_main() {
 | 
				
			||||||
  esp_err_t ret;
 | 
					  esp_err_t ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -185,6 +300,37 @@ void app_main() {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  xTaskCreate(&loop, "loop",  2048, NULL, 6, NULL);
 | 
					  //initialize_console();
 | 
				
			||||||
  xTaskCreate(&servo, "servo",  2048, NULL, 6, NULL);
 | 
					  //esp_console_register_help_command();
 | 
				
			||||||
 | 
					  //register_servo_cmd();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  pwm_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  xTaskCreate(&loop, "loop",  4096, NULL, 6, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const char* prompt = LOG_COLOR_I "grii> " LOG_RESET_COLOR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return;
 | 
				
			||||||
 | 
					  while(true) {
 | 
				
			||||||
 | 
					    char* line = linenoise(prompt);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (line == NULL) { /* Ignore empty lines */
 | 
				
			||||||
 | 
					      continue;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    linenoiseHistoryAdd(line);
 | 
				
			||||||
 | 
					    int ret;
 | 
				
			||||||
 | 
					    esp_err_t err = esp_console_run(line, &ret);
 | 
				
			||||||
 | 
					    if (err == ESP_ERR_NOT_FOUND) {
 | 
				
			||||||
 | 
					      printf("Unrecognized command\n");
 | 
				
			||||||
 | 
					    } else if (err == ESP_ERR_INVALID_ARG) {
 | 
				
			||||||
 | 
					      // command was empty
 | 
				
			||||||
 | 
					    } else if (err == ESP_OK && ret != ESP_OK) {
 | 
				
			||||||
 | 
					      printf("Command returned non-zero error code: 0x%x (%s)\n", ret, esp_err_to_name(err));
 | 
				
			||||||
 | 
					    } else if (err != ESP_OK) {
 | 
				
			||||||
 | 
					      printf("Internal error: %s\n", esp_err_to_name(err));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /* linenoise allocates line buffer on the heap, so need to free it */
 | 
				
			||||||
 | 
					    linenoiseFree(line);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue