'embeded'에 해당되는 글 1531건

  1. 2021.12.30 orange pi 3
  2. 2021.12.30 esp32cam ptz 카메라 완료
  3. 2021.12.28 orange pi 3 기동
  4. 2021.12.28 orange pi gpio
  5. 2021.12.27 orange pi 3 사양
  6. 2021.12.22 rpitx on rpi4
  7. 2021.12.16 rpitx
  8. 2021.11.28 esp32 servo와 flash
  9. 2021.11.27 esp32 flash on/off 버전
  10. 2021.11.27 stm32 vs esp32
embeded/orange pi2021. 12. 30. 14:56

install2EMMC.sh 를 써서 어떻게 해보려고 하는데 잘 안되네

저거용 이미지가 따로 있나? 공식 홈페이지의 debian으로는 안되네

~# ./OrangePi_install2EMMC.sh
Error: EMMC not found.

 

/dev/mmcblk0boot0가 있어야 해당 에러가 발생하지 않는데

왜 sdcard의 파티션을 보고 뜬금없이 EMMC not found 라고 에러를 띄우지?

# ls -al /dev/mmcblk*
brw-rw---- 1 root disk 179, 96 Dec 29 14:17 /dev/mmcblk0
brw-rw---- 1 root disk 179, 97 Dec 29 14:17 /dev/mmcblk0p1
brw-rw---- 1 root disk 179,  0 Dec 29 14:17 /dev/mmcblk2
brw-rw---- 1 root disk 179, 32 Dec 29 14:17 /dev/mmcblk2boot0
brw-rw---- 1 root disk 179, 64 Dec 29 14:17 /dev/mmcblk2boot1
brw-rw---- 1 root disk 179,  1 Dec 29 14:17 /dev/mmcblk2p1

 

 

[링크 : https://github.com/zoums/osibook/blob/master/assets/files/OrangePi_install2EMMC.sh]

[링크 : https://raw.githubusercontent.com/zoums/osibook/master/assets/files/OrangePi_install2EMMC.sh]

 

+

[링크 : https://github.com/orangepi-xunlong]

'embeded > orange pi' 카테고리의 다른 글

orangepi-config  (0) 2021.12.31
orange pi 3, 3 lts  (0) 2021.12.31
orange pi 3 기동  (0) 2021.12.28
orange pi gpio  (0) 2021.12.28
orange pi 3 사양  (0) 2021.12.27
Posted by 구차니
embeded/esp322021. 12. 30. 14:20

속도가 느려서 PAN 방향으로 10도 씩 움직이던걸 20도로 늘리고

보드를 대충 만들어서 산뜻하게 만들어서 완료!

 

 

그나저나 저놈의 MAC 시작 부분은 왜 제 멋대이고

iptime은 왜 mac에 아이피 고정했는데 바로 안 먹히는건가!

 

검색을 해보니 espressif 사의 mac이 맞긴한데..

106개 대역.. 왜이리 많은 맥을 구매한거지 -ㅁ-? 

84-CC-A8   (hex) Espressif Inc.
84CCA8     (base 16) Espressif Inc.
Room 204, Building 2, 690 Bibo Rd, Pudong New Area
Shanghai  Shanghai  201203
CN


9C-9C-1F   (hex) Espressif Inc.
9C9C1F     (base 16) Espressif Inc.
Room 204, Building 2, 690 Bibo Rd, Pudong New Area
Shanghai  Shanghai  201203
CN

[링크 : http://standards-oui.ieee.org/oui/oui.txt]

'embeded > esp32' 카테고리의 다른 글

esp32-cam에 lcd 달기  (0) 2023.11.18
xtensa lx6 instruction set  (0) 2023.03.13
esp32 servo와 flash  (0) 2021.11.28
esp32 flash on/off 버전  (0) 2021.11.27
stm32 vs esp32  (0) 2021.11.27
Posted by 구차니
embeded/orange pi2021. 12. 28. 19:01

기본계정은 root / orangepi

전원은 micro USB / OTG 포트로 공급해주니 문제없이 작동한다.

microSD를 꽂지 않으면 power LED 조차 안들어 오는건가?

 

 

htop 신버전인가 cpu 온도랑 클럭 주파수가 나오네?

아무튼 1.8GHz랑 480MHZ랑 1초간격으로 오가는걸 보면 최적화는 잘 되어있지 않은듯(idle인데도)

 

/dev/mmcblk2 가 eMMC  같은데 이녀석만으로 독립 부팅이 가능하려나?

# fdisk -l
Disk /dev/mmcblk0: 14.86 GiB, 15931539456 bytes, 31116288 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe672dc9f

Device         Boot Start      End  Sectors  Size Id Type
/dev/mmcblk0p1       8192 30805119 30796928 14.7G 83 Linux


Disk /dev/mmcblk2: 7.29 GiB, 7818182656 bytes, 15269888 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x2d07f978

Device         Boot Start      End  Sectors  Size Id Type
/dev/mmcblk2p1       8192 15117183 15108992  7.2G 83 Linux


Disk /dev/zram0: 50 MiB, 52428800 bytes, 12800 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes


Disk /dev/zram1: 994.69 MiB, 1042993152 bytes, 254637 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

 

# cat /proc/cpuinfo
processor       : 0
Processor       : AArch64 Processor rev 4 (aarch64)
Hardware        : sun50iw1p1
BogoMIPS        : 48.00
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

 

OrangePi_install2EMMC.sh

파일을 찾아서 eMMC에 설치하고 독립적으로 켤 수 있으면 좋겠네?

[링크 : https://forum.armbian.com/topic/9368-orangepi-3-h6-allwiner-chip/page/23/]

'embeded > orange pi' 카테고리의 다른 글

orangepi-config  (0) 2021.12.31
orange pi 3, 3 lts  (0) 2021.12.31
orange pi 3  (0) 2021.12.30
orange pi gpio  (0) 2021.12.28
orange pi 3 사양  (0) 2021.12.27
Posted by 구차니
embeded/orange pi2021. 12. 28. 07:10

사이트는 느리고, 내용은 부실하고..

wiringpi 프로젝트가 유지되지 않는걸로 알고 있는데

잔재(?)는 남아 사실상 표준이 되어가는 중인가..

 

[링크 : http://www.orangepi.org/Docs/WiringPi.html]

'embeded > orange pi' 카테고리의 다른 글

orangepi-config  (0) 2021.12.31
orange pi 3, 3 lts  (0) 2021.12.31
orange pi 3  (0) 2021.12.30
orange pi 3 기동  (0) 2021.12.28
orange pi 3 사양  (0) 2021.12.27
Posted by 구차니
embeded/orange pi2021. 12. 27. 21:45

일단 성능은 가지고 있는 SBC들 중에 최상급인 듯?

다만 업체 지원이 미비해서 쓰는게 편리하지 않다는게 단점

 

all winner h6 cortex a53 1.8g quad

mali t720

2g 8g

ir receiver

mic, 이어폰(스테레오. cvbs)

full size hdmi 2.0a 4k 60p

usb otg (pwr)

usb 3.0

gbe

802.11ac, bt5.0

 

[링크 : http://www.orangepi.org/Orange%20Pi%203/]

'embeded > orange pi' 카테고리의 다른 글

orangepi-config  (0) 2021.12.31
orange pi 3, 3 lts  (0) 2021.12.31
orange pi 3  (0) 2021.12.30
orange pi 3 기동  (0) 2021.12.28
orange pi gpio  (0) 2021.12.28
Posted by 구차니
embeded/raspberry pi2021. 12. 22. 16:53

install.sh 하면 이것저것 받고 config.txt를 수정하냐고 물어본다.

easytest.sh는 ncurse 기반으로 테스트 프로그램을 이것저것 실행할 수 있다.

git clone https://github.com/F5OEO/rpitx
cd rpitx
./install.sh
./easytest.sh

 

install.sh로 설치하면 config.txt에 아래와 같이 추가되는데,

라즈베리 4로 하다 보니 굳이 저걸 넣을 필요있나 싶어서 주석처리 해주고 리부팅 안하는데 문제없이 실행된다.

gpu_freq=250
force_turbo=1

 

easytest 실행하면 가장 처음에 주파수 넣으라는데 기본값은 434MHz

 

아직 신호가 나가진 않고, F Set frequency 에서 다시 설정이 가능하다.

 

0 Tune을 엔터치면 다음화면이 나오면서 송출된다.

 

Tune 을 해보면 아래와 같이 나오는데, GPIO에 핀연결없이 그냥 보드에서 송출하는 거라 신호가 약하다.

대충 직선거리 3m 이내에서는 저정도 세기로 나오는 듯(gqrx에서 신호 강도의 단위를 모름..)

 

Chirp

IQ balance를 켜놔서 그런가 이중 나선 처럼 나온다.

 

한번.. 5MHz HF 쪽을 시도해보는데

direct sampling 해야하니 아래와 같이 설정하고

5MHz 에 Chrip 하니 신호가 잘나온다.

10cm 남짓한 점퍼선으로는 파장 길이를 충족시키지 못해서 인지 수신이 안되고 손으로 잡고 있어주니 송출된다.

(물론 24cm 정도 되는 DMB 안테나라 수신측도 정상은 아니지만..)

아무튼 안테나는 UV가 아닌 HF로 해주니 수신 확인 성공!

(이전에 점퍼 날려서 HF쪽 작동은 하게 해놨던게 효과는 있는지 보려면 또 떼야 하나?!)

 

주파수는 1Ghz 까지 가능하다고 되어있는데 그거 보다 높은 주파수로 하면 라즈베리 자체가 뻗어버리니 주의!

3MHz는 되는데 2MHz는 또 죽는다. 50kHz 되는거 맞나?

[링크 : https://github.com/F5OEO/rpitx]

'embeded > raspberry pi' 카테고리의 다른 글

rpi 7" dsi  (0) 2022.01.21
rpi DSI 7인치 터치 스크린  (0) 2022.01.20
rpitx  (0) 2021.12.16
wayland on rpi  (0) 2021.11.22
rpi 3b 2초 부팅 fs  (0) 2021.11.20
Posted by 구차니
embeded/raspberry pi2021. 12. 16. 16:10

5kHz ~ 1.5GHz 까지 송출이 가능한데, 밴드패스 필터 쓰지 않고 송출하다가는

다른 대역을 쓰면서 전파법에 철퇴 맞을수 있으니 주의가 필요하다고 경고가 써있는데

밴드패스 필터 따위 만들줄 모르니 일단 패~~~~쓰 ㅠㅠ

[링크 : https://github.com/F5OEO/rpitx]

[링크 : https://hellocomputer.tistory.com/8]

 

pifm의 GPIO 4를 쓰는것이 동일한걸 보면

DMA를 통한 ext. clk out을 쓰는 것 같은데 pifm은 1MHz~250MHz를 할 수 있다고 하는데 반해

rpitx는 1.5GHz 까지 가능하다고 한데 무슨 차이가 있어서 범위의 변화가 생기는지 궁금해지네?

[링크 : https://github.com/rm-hull/pifm]

 

 

+

pifm은 FM만 되는데 반해 pitx는 fm, am, ssb, sstv, fsq 와 같이 다양한 모듈레이션을 제공한다고 한다.

PiTx is a software which permit to transmit HF directly through a pin of Raspberry Pi GPIO. Unlike PiFM which transmit only in FM, PiTx is able to perform multi modulation (FM,AM,SSB,SSTV,FSQ) : it has an I/Q input to be agnostic.
The demonstration here is done in several steps :
– Record an I/Q file from a doorbell transmitter on 434MHZ (first part)
– Playing it with the Raspberry Pi using Pitx on HF on same frequency
– Listen to the doorbell receiver which recognize the signal

[링크 : https://www.rtl-sdr.com/transmitting-fm-am-ssb-sstv-and-fsq-with-just-a-raspberry-pi/]

'embeded > raspberry pi' 카테고리의 다른 글

rpi DSI 7인치 터치 스크린  (0) 2022.01.20
rpitx on rpi4  (0) 2021.12.22
wayland on rpi  (0) 2021.11.22
rpi 3b 2초 부팅 fs  (0) 2021.11.20
img 파일 마운트 하기  (0) 2021.11.20
Posted by 구차니
embeded/esp322021. 11. 28. 20:41

배선 문제로 pan만 연결했는데

전원부가 미친듯이 열받아서 보드를 손으로 잡고 있기 부담스러울 정도라

나중에 esp32와 서보 전원을 분리해서 만들어야 안정적으로 작동이 가능할것 같다.

 

IO15가 pan

IO14가 tilt 로 구성해둔 듯.

 

'embeded > esp32' 카테고리의 다른 글

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
Posted by 구차니
embeded/esp322021. 11. 27. 14:30

눈으로 보면 미친듯이 밝은데 생각외로 밝진 않은 느낌 -_ㅠ

가장 아래 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/]

[링크 : https://raw.githubusercontent.com/RuiSantosdotme/ESP32-CAM-eBook/master/Code/Module_4/Pan_and_Tilt_Video_Streaming/Pan_and_Tilt_Video_Streaming.ino]

'embeded > esp32' 카테고리의 다른 글

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
Posted by 구차니
embeded/esp322021. 11. 27. 11:45

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]

'embeded > esp32' 카테고리의 다른 글

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
Posted by 구차니