으앙 쥬금
'개소리 왈왈 > 육아관련 주저리' 카테고리의 다른 글
어린이집 확인자 발생 (0) | 2021.12.05 |
---|---|
코로나 난리구나.. (0) | 2021.12.04 |
방정 (0) | 2021.11.21 |
병원 투어 2주차 (0) | 2021.11.20 |
병원 투어 (0) | 2021.11.15 |
으앙 쥬금
어린이집 확인자 발생 (0) | 2021.12.05 |
---|---|
코로나 난리구나.. (0) | 2021.12.04 |
방정 (0) | 2021.11.21 |
병원 투어 2주차 (0) | 2021.11.20 |
병원 투어 (0) | 2021.11.15 |
아오 터치가 왜 안돼야 ㅠㅜ
wayland screen share (0) | 2021.12.02 |
---|---|
wayland 와 weston 문서 (0) | 2021.12.02 |
weston shell (0) | 2021.11.26 |
weston_log() (0) | 2021.11.25 |
wayland weston 구조 (0) | 2021.11.24 |
배선 문제로 pan만 연결했는데
전원부가 미친듯이 열받아서 보드를 손으로 잡고 있기 부담스러울 정도라
나중에 esp32와 서보 전원을 분리해서 만들어야 안정적으로 작동이 가능할것 같다.
IO15가 pan
IO14가 tilt 로 구성해둔 듯.
xtensa lx6 instruction set (0) | 2023.03.13 |
---|---|
esp32cam ptz 카메라 완료 (0) | 2021.12.30 |
esp32 flash on/off 버전 (0) | 2021.11.27 |
stm32 vs esp32 (0) | 2021.11.27 |
eps32-cam 내장 LED (0) | 2021.11.24 |
으허어어엉 안테나가 문제냐
rtl sdr이 문제냐 ㅠㅜ
[링크 : https://ko.m.wikipedia.org/wiki/다이폴_안테나]
주파수는 NOAA15나 NOAA19니까 대충 때 맞춰서 보면 되고
방향이랑 위성은 stellarium으로 확인
그런데 자이로가 문제가 있는지 방향이 안 맞을때도 있으니 방위는 미리 확인해두는게 좋다.
최근접이 1100km 근처이긴 한 것 같은데
신호가 저~~~~언혀 뜨질 않는다. 하긴 FM 라디오도 잡음이 심한데 위성 신호는 더 못잡는게 당연한걸려나?
rtl sdr i,q branch? (0) | 2021.12.03 |
---|---|
지름 재도전!! (0) | 2021.12.01 |
wxtoimg ubuntu (4) | 2021.11.27 |
rtl-sdr 지름 (0) | 2021.11.25 |
rtl-sdr gqrx direct sampling (0) | 2021.11.25 |
wxtoimg는 윈도우용이 메인인 듯?
아무튼 라이선스 이야기도 나오고.. 우분투는 deb 로는 제공하지만 apt 를 통해 제공하진 않는다.
$ wxtoimg Usage: wxtoimg [-N|-S] [-a|-b] [-e <enh>] [-f <hz>] [-h] [-t <sat>] x.wav x.png where: -N northbound pass -S southbound pass (default) -a channel A image only -b channel B image only -e <enh> enhancement option (histeq, MSA, MCIR, HVCT, sea, ZA, ...) -f <hz> adjust sound card sample rate (default 11025.0) -h show advanced options usage -t <sat> force processing to one of: Resurs(r), Meteor3(m), Meteor2(2), SICH1M(h), SICH(s), Okean(o), NOAA(n), Meteosat(e), GOES(g), GMS(j), MTSAT(k), other(x) (default is autodetect) USE xwxtoimg FOR A GRAPHICAL USER INTERFACE. Copyright (c) 2001-2010 Central North Publishing Limited. All rights reserved. |
[링크 : https://wxtoimgrestored.xyz/downloads/]
업그레이드 하세요~ 압박압박
프로그램이 먼가 안 맞는지 UI가 죄다 깨진다
지름 재도전!! (0) | 2021.12.01 |
---|---|
noaa 위성사진 수신 실패 (0) | 2021.11.28 |
rtl-sdr 지름 (0) | 2021.11.25 |
rtl-sdr gqrx direct sampling (0) | 2021.11.25 |
수신강도가 너무 약한건가? (0) | 2021.11.25 |
눈으로 보면 미친듯이 밝은데 생각외로 밝진 않은 느낌 -_ㅠ
가장 아래 Flash 버튼을 추가했음
Flash on!
새로 스케치 만들어서 붙여넣고
스케치 - 라이브러리 포함하기 - ESP32 하고
툴 - 라이브러리 관리 - esp32servo 설치하면 된다.
#include <dummy.h> /********* Rui Santos Complete instructions at https://RandomNerdTutorials.com/esp32-cam-projects-ebook/ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. *********/ #define LED_BUILTIN 4 #include "esp_camera.h" #include <WiFi.h> #include "esp_timer.h" #include "img_converters.h" #include "Arduino.h" #include "fb_gfx.h" #include "soc/soc.h" // disable brownout problems #include "soc/rtc_cntl_reg.h" // disable brownout problems #include "esp_http_server.h" #include <ESP32Servo.h> // Replace with your network credentials const char* ssid = "wifi_ssid"; const char* password = "wifi_passwd"; #define PART_BOUNDARY "123456789000000000000987654321" #define CAMERA_MODEL_AI_THINKER //#define CAMERA_MODEL_M5STACK_PSRAM //#define CAMERA_MODEL_M5STACK_WITHOUT_PSRAM //#define CAMERA_MODEL_M5STACK_PSRAM_B //#define CAMERA_MODEL_WROVER_KIT #if defined(CAMERA_MODEL_WROVER_KIT) #define PWDN_GPIO_NUM -1 #define RESET_GPIO_NUM -1 #define XCLK_GPIO_NUM 21 #define SIOD_GPIO_NUM 26 #define SIOC_GPIO_NUM 27 #define Y9_GPIO_NUM 35 #define Y8_GPIO_NUM 34 #define Y7_GPIO_NUM 39 #define Y6_GPIO_NUM 36 #define Y5_GPIO_NUM 19 #define Y4_GPIO_NUM 18 #define Y3_GPIO_NUM 5 #define Y2_GPIO_NUM 4 #define VSYNC_GPIO_NUM 25 #define HREF_GPIO_NUM 23 #define PCLK_GPIO_NUM 22 #elif defined(CAMERA_MODEL_M5STACK_PSRAM) #define PWDN_GPIO_NUM -1 #define RESET_GPIO_NUM 15 #define XCLK_GPIO_NUM 27 #define SIOD_GPIO_NUM 25 #define SIOC_GPIO_NUM 23 #define Y9_GPIO_NUM 19 #define Y8_GPIO_NUM 36 #define Y7_GPIO_NUM 18 #define Y6_GPIO_NUM 39 #define Y5_GPIO_NUM 5 #define Y4_GPIO_NUM 34 #define Y3_GPIO_NUM 35 #define Y2_GPIO_NUM 32 #define VSYNC_GPIO_NUM 22 #define HREF_GPIO_NUM 26 #define PCLK_GPIO_NUM 21 #elif defined(CAMERA_MODEL_M5STACK_WITHOUT_PSRAM) #define PWDN_GPIO_NUM -1 #define RESET_GPIO_NUM 15 #define XCLK_GPIO_NUM 27 #define SIOD_GPIO_NUM 25 #define SIOC_GPIO_NUM 23 #define Y9_GPIO_NUM 19 #define Y8_GPIO_NUM 36 #define Y7_GPIO_NUM 18 #define Y6_GPIO_NUM 39 #define Y5_GPIO_NUM 5 #define Y4_GPIO_NUM 34 #define Y3_GPIO_NUM 35 #define Y2_GPIO_NUM 17 #define VSYNC_GPIO_NUM 22 #define HREF_GPIO_NUM 26 #define PCLK_GPIO_NUM 21 #elif defined(CAMERA_MODEL_AI_THINKER) #define PWDN_GPIO_NUM 32 #define RESET_GPIO_NUM -1 #define XCLK_GPIO_NUM 0 #define SIOD_GPIO_NUM 26 #define SIOC_GPIO_NUM 27 #define Y9_GPIO_NUM 35 #define Y8_GPIO_NUM 34 #define Y7_GPIO_NUM 39 #define Y6_GPIO_NUM 36 #define Y5_GPIO_NUM 21 #define Y4_GPIO_NUM 19 #define Y3_GPIO_NUM 18 #define Y2_GPIO_NUM 5 #define VSYNC_GPIO_NUM 25 #define HREF_GPIO_NUM 23 #define PCLK_GPIO_NUM 22 #elif defined(CAMERA_MODEL_M5STACK_PSRAM_B) #define PWDN_GPIO_NUM -1 #define RESET_GPIO_NUM 15 #define XCLK_GPIO_NUM 27 #define SIOD_GPIO_NUM 22 #define SIOC_GPIO_NUM 23 #define Y9_GPIO_NUM 19 #define Y8_GPIO_NUM 36 #define Y7_GPIO_NUM 18 #define Y6_GPIO_NUM 39 #define Y5_GPIO_NUM 5 #define Y4_GPIO_NUM 34 #define Y3_GPIO_NUM 35 #define Y2_GPIO_NUM 32 #define VSYNC_GPIO_NUM 25 #define HREF_GPIO_NUM 26 #define PCLK_GPIO_NUM 21 #else #error "Camera model not selected" #endif #define SERVO_1 14 #define SERVO_2 15 #define SERVO_STEP 5 Servo servoN1; Servo servoN2; Servo servo1; Servo servo2; int servo1Pos = 0; int servo2Pos = 0; int flash = 0; static const char* _STREAM_CONTENT_TYPE = "multipart/x-mixed-replace;boundary=" PART_BOUNDARY; static const char* _STREAM_BOUNDARY = "\r\n--" PART_BOUNDARY "\r\n"; static const char* _STREAM_PART = "Content-Type: image/jpeg\r\nContent-Length: %u\r\n\r\n"; httpd_handle_t camera_httpd = NULL; httpd_handle_t stream_httpd = NULL; static const char PROGMEM INDEX_HTML[] = R"rawliteral( <html> <head> <title>ESP32-CAM Robot</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> body { font-family: Arial; text-align: center; margin:0px auto; padding-top: 30px;} table { margin-left: auto; margin-right: auto; } td { padding: 8 px; } .button { background-color: #2f4468; border: none; color: white; padding: 10px 20px; text-align: center; text-decoration: none; display: inline-block; font-size: 18px; margin: 6px 3px; cursor: pointer; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; -webkit-tap-highlight-color: rgba(0,0,0,0); } img { width: auto ; max-width: 100% ; height: auto ; } </style> </head> <body> <h1>ESP32-CAM Pan and Tilt</h1> <img src="" id="photo" > <table> <tr><td colspan="3" align="center"><button class="button" onmousedown="toggleCheckbox('up');" ontouchstart="toggleCheckbox('up');">Up</button></td></tr> <tr><td align="center"><button class="button" onmousedown="toggleCheckbox('left');" ontouchstart="toggleCheckbox('left');">Left</button></td><td align="center"></td><td align="center"><button class="button" onmousedown="toggleCheckbox('right');" ontouchstart="toggleCheckbox('right');">Right</button></td></tr> <tr><td colspan="3" align="center"><button class="button" onmousedown="toggleCheckbox('down');" ontouchstart="toggleCheckbox('down');">Down</button></td></tr> <tr><td colspan="3" align="center"><button class="button" onmousedown="toggleCheckbox('flash');" ontouchstart="toggleCheckbox('flash');">Flash</button></td></tr> </table> <script> function toggleCheckbox(x) { var xhr = new XMLHttpRequest(); xhr.open("GET", "/action?go=" + x, true); xhr.send(); } window.onload = document.getElementById("photo").src = window.location.href.slice(0, -1) + ":81/stream"; </script> </body> </html> )rawliteral"; static esp_err_t index_handler(httpd_req_t *req){ httpd_resp_set_type(req, "text/html"); return httpd_resp_send(req, (const char *)INDEX_HTML, strlen(INDEX_HTML)); } static esp_err_t stream_handler(httpd_req_t *req){ camera_fb_t * fb = NULL; esp_err_t res = ESP_OK; size_t _jpg_buf_len = 0; uint8_t * _jpg_buf = NULL; char * part_buf[64]; res = httpd_resp_set_type(req, _STREAM_CONTENT_TYPE); if(res != ESP_OK){ return res; } while(true){ fb = esp_camera_fb_get(); if (!fb) { Serial.println("Camera capture failed"); res = ESP_FAIL; } else { if(fb->width > 400){ if(fb->format != PIXFORMAT_JPEG){ bool jpeg_converted = frame2jpg(fb, 80, &_jpg_buf, &_jpg_buf_len); esp_camera_fb_return(fb); fb = NULL; if(!jpeg_converted){ Serial.println("JPEG compression failed"); res = ESP_FAIL; } } else { _jpg_buf_len = fb->len; _jpg_buf = fb->buf; } } } if(res == ESP_OK){ size_t hlen = snprintf((char *)part_buf, 64, _STREAM_PART, _jpg_buf_len); res = httpd_resp_send_chunk(req, (const char *)part_buf, hlen); } if(res == ESP_OK){ res = httpd_resp_send_chunk(req, (const char *)_jpg_buf, _jpg_buf_len); } if(res == ESP_OK){ res = httpd_resp_send_chunk(req, _STREAM_BOUNDARY, strlen(_STREAM_BOUNDARY)); } if(fb){ esp_camera_fb_return(fb); fb = NULL; _jpg_buf = NULL; } else if(_jpg_buf){ free(_jpg_buf); _jpg_buf = NULL; } if(res != ESP_OK){ break; } //Serial.printf("MJPG: %uB\n",(uint32_t)(_jpg_buf_len)); } return res; } static esp_err_t cmd_handler(httpd_req_t *req){ char* buf; size_t buf_len; char variable[32] = {0,}; buf_len = httpd_req_get_url_query_len(req) + 1; if (buf_len > 1) { buf = (char*)malloc(buf_len); if(!buf){ httpd_resp_send_500(req); return ESP_FAIL; } if (httpd_req_get_url_query_str(req, buf, buf_len) == ESP_OK) { if (httpd_query_key_value(buf, "go", variable, sizeof(variable)) == ESP_OK) { } else { free(buf); httpd_resp_send_404(req); return ESP_FAIL; } } else { free(buf); httpd_resp_send_404(req); return ESP_FAIL; } free(buf); } else { httpd_resp_send_404(req); return ESP_FAIL; } sensor_t * s = esp_camera_sensor_get(); //flip the camera vertically //s->set_vflip(s, 1); // 0 = disable , 1 = enable // mirror effect //s->set_hmirror(s, 1); // 0 = disable , 1 = enable int res = 0; if(!strcmp(variable, "up")) { if(servo1Pos <= 170) { servo1Pos += 10; servo1.write(servo1Pos); } Serial.println(servo1Pos); Serial.println("Up"); } else if(!strcmp(variable, "left")) { if(servo2Pos <= 170) { servo2Pos += 10; servo2.write(servo2Pos); } Serial.println(servo2Pos); Serial.println("Left"); } else if(!strcmp(variable, "right")) { if(servo2Pos >= 10) { servo2Pos -= 10; servo2.write(servo2Pos); } Serial.println(servo2Pos); Serial.println("Right"); } else if(!strcmp(variable, "down")) { if(servo1Pos >= 10) { servo1Pos -= 10; servo1.write(servo1Pos); } Serial.println(servo1Pos); Serial.println("Down"); } else if(!strcmp(variable, "flash")) { flash = !flash; digitalWrite(LED_BUILTIN, flash); Serial.println("flash"); } else { res = -1; } if(res){ return httpd_resp_send_500(req); } httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); return httpd_resp_send(req, NULL, 0); } void startCameraServer(){ httpd_config_t config = HTTPD_DEFAULT_CONFIG(); config.server_port = 80; httpd_uri_t index_uri = { .uri = "/", .method = HTTP_GET, .handler = index_handler, .user_ctx = NULL }; httpd_uri_t cmd_uri = { .uri = "/action", .method = HTTP_GET, .handler = cmd_handler, .user_ctx = NULL }; httpd_uri_t stream_uri = { .uri = "/stream", .method = HTTP_GET, .handler = stream_handler, .user_ctx = NULL }; if (httpd_start(&camera_httpd, &config) == ESP_OK) { httpd_register_uri_handler(camera_httpd, &index_uri); httpd_register_uri_handler(camera_httpd, &cmd_uri); } config.server_port += 1; config.ctrl_port += 1; if (httpd_start(&stream_httpd, &config) == ESP_OK) { httpd_register_uri_handler(stream_httpd, &stream_uri); } } void setup() { WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector servo1.setPeriodHertz(50); // standard 50 hz servo servo2.setPeriodHertz(50); // standard 50 hz servo servoN1.attach(2, 1000, 2000); servoN2.attach(13, 1000, 2000); servo1.attach(SERVO_1, 1000, 2000); servo2.attach(SERVO_2, 1000, 2000); servo1.write(servo1Pos); servo2.write(servo2Pos); pinMode (LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, flash); Serial.begin(115200); Serial.setDebugOutput(false); camera_config_t config; config.ledc_channel = LEDC_CHANNEL_0; config.ledc_timer = LEDC_TIMER_0; config.pin_d0 = Y2_GPIO_NUM; config.pin_d1 = Y3_GPIO_NUM; config.pin_d2 = Y4_GPIO_NUM; config.pin_d3 = Y5_GPIO_NUM; config.pin_d4 = Y6_GPIO_NUM; config.pin_d5 = Y7_GPIO_NUM; config.pin_d6 = Y8_GPIO_NUM; config.pin_d7 = Y9_GPIO_NUM; config.pin_xclk = XCLK_GPIO_NUM; config.pin_pclk = PCLK_GPIO_NUM; config.pin_vsync = VSYNC_GPIO_NUM; config.pin_href = HREF_GPIO_NUM; config.pin_sscb_sda = SIOD_GPIO_NUM; config.pin_sscb_scl = SIOC_GPIO_NUM; config.pin_pwdn = PWDN_GPIO_NUM; config.pin_reset = RESET_GPIO_NUM; config.xclk_freq_hz = 20000000; config.pixel_format = PIXFORMAT_JPEG; if(psramFound()){ config.frame_size = FRAMESIZE_VGA; config.jpeg_quality = 10; config.fb_count = 2; } else { config.frame_size = FRAMESIZE_SVGA; config.jpeg_quality = 12; config.fb_count = 1; } // Camera init esp_err_t err = esp_camera_init(&config); if (err != ESP_OK) { Serial.printf("Camera init failed with error 0x%x", err); return; } // Wi-Fi connection WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.print("Camera Stream Ready! Go to: http://"); Serial.println(WiFi.localIP()); // Start streaming web server startCameraServer(); } void loop() { } |
[링크 : https://randomnerdtutorials.com/esp32-cam-pan-and-tilt-2-axis/]
esp32cam ptz 카메라 완료 (0) | 2021.12.30 |
---|---|
esp32 servo와 flash (0) | 2021.11.28 |
stm32 vs esp32 (0) | 2021.11.27 |
eps32-cam 내장 LED (0) | 2021.11.24 |
포고플(PGP) 리버싱 자료 (0) | 2021.08.19 |
stm32f407 168mhz (cortex-m4)
stm32f103 72mhz (cortex-m3)
esp32 240mhz
아키텍쳐가 달라서 완벽한 비교도 아니니 참고 수준이지만
cortex m3 보단 낫고
cortex m4 와는 비근하지만 약간 쳐지는 수준안가?
[링크 : https://forum.arduino.cc/t/esp32-beats-stm32f407-and-is-48-times-faster-than-the-mega-2560/590788]
esp32 servo와 flash (0) | 2021.11.28 |
---|---|
esp32 flash on/off 버전 (0) | 2021.11.27 |
eps32-cam 내장 LED (0) | 2021.11.24 |
포고플(PGP) 리버싱 자료 (0) | 2021.08.19 |
esp32cam pwm (0) | 2021.08.08 |
compositor 보긴싫어 ㅠ
wayland 와 weston 문서 (0) | 2021.12.02 |
---|---|
wayland (0) | 2021.11.29 |
weston_log() (0) | 2021.11.25 |
wayland weston 구조 (0) | 2021.11.24 |
wayland weston flow (0) | 2021.11.22 |
웹 어셈블리에서
인자로 입력 받아 결과를 웹에서 받는 예제를 찾아봄.
wasm으로 변환될 코드는 int 형을 받아서 int 형으로 출력할 것이고
#include <math.h>
extern "C" {
int int_sqrt(int x) {
return sqrt(x);
}
}
빌드는 아래와 같이 emcc를 통해 ccall과 cwrap 방식으로 _int_sqrt 함수를 내보내라 인것 같은데
int_sqrt가 아니라 _int_sqrt는 calling convention때문인가?
$ emcc tests/hello_function.cpp -o function.html -s EXPORTED_FUNCTIONS='["_int_sqrt"]' -s EXPORTED_RUNTIME_METHODS='["ccall","cwrap"]' |
웹에서 받는 법이 두가지라는데 cwrap으로 하면 int_sqrt 객체를 만들어서 한다는데 리턴이 되는진 모르겠고
ccall로 하면 인자를 던지는게 조금 귀찮아 지지만 var result에 결과가 들어가는 듯.
int_sqrt = Module.cwrap('int_sqrt', 'number', ['number'])
int_sqrt(12)
int_sqrt(28)
// Call C from JavaScript
var result = Module.ccall('int_sqrt', // name of C function
'number', // return type
['number'], // argument types
[28]); // arguments
// result is 5
[링크 : https://emscripten.org/docs/porting/connecting_cpp_and_javascript/Interacting-with-code.html]
[링크 : https://m.blog.daum.net/junek69/88]
[링크 : https://developer.mozilla.org/ko/docs/WebAssembly/C_to_wasm]
wasm 배열 예제 (0) | 2023.01.31 |
---|---|
wasm text format (0) | 2021.10.26 |
wasm text 와 binary 상호변환 (0) | 2021.10.26 |
emcc wasm 빌드 (0) | 2021.10.25 |
wasm from c, cpp (0) | 2021.10.24 |
엔터는 쳐줘야 깔끔하게 나온다 -_ㅠ
(작성자가 \n 안넣어줘서 개판인 로그를 보았다는 결론)
[링크 : https://wayland.pages.freedesktop.org/weston/toc/libweston/log.html#_CPPv410weston_logPKcz]
+
23.10.18
로그를 위해 무언가를 설정은 해주어야 하는 듯..
weston_log_set_handler() must be called before using of weston_log(). |
wayland (0) | 2021.11.29 |
---|---|
weston shell (0) | 2021.11.26 |
wayland weston 구조 (0) | 2021.11.24 |
wayland weston flow (0) | 2021.11.22 |
wayland / weston (0) | 2021.11.18 |