รหัสสินค้า | A3090 |
หมวดหมู่ | ESP32 WiFi Bluetooth |
ราคา | 270.00 บาท |
สถานะสินค้า | พร้อมส่ง |
จำนวน | ชิ้น |
#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 "dl_lib.h" | |
#include "esp_http_server.h" | |
//Replace with your network credentials | |
const char* ssid = "REPLACE_WITH_YOUR_SSID"; // แก้ชื่อ wifi | |
const char* password = "REPLACE_WITH_YOUR_PASSWORD"; // แก้รหัสผ่าน | |
#define PART_BOUNDARY "123456789000000000000987654321" | |
// This project was tested with the AI Thinker Model, M5STACK PSRAM Model and M5STACK WITHOUT PSRAM | |
#define CAMERA_MODEL_AI_THINKER | |
//#define CAMERA_MODEL_M5STACK_PSRAM | |
//#define CAMERA_MODEL_M5STACK_WITHOUT_PSRAM | |
// Not tested with this model | |
//#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 | |
#else | |
#error "Camera model not selected" | |
#endif | |
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 stream_httpd = NULL; | |
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; | |
} | |
void startCameraServer(){ | |
httpd_config_t config = HTTPD_DEFAULT_CONFIG(); | |
config.server_port = 80; | |
httpd_uri_t index_uri = { | |
.uri = "/", | |
.method = HTTP_GET, | |
.handler = stream_handler, | |
.user_ctx = NULL | |
}; | |
//Serial.printf("Starting web server on port: '%d'\n", config.server_port); | |
if (httpd_start(&stream_httpd, &config) == ESP_OK) { | |
httpd_register_uri_handler(stream_httpd, &index_uri); | |
} | |
} | |
void setup() { | |
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector | |
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_UXGA; | |
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.print(WiFi.localIP()); | |
// Start streaming web server | |
startCameraServer(); | |
} | |
void loop() { | |
delay(1); | |
} |
จัดส่ง วันอาทิตย์-วันศุกร์
ส่งแบบ EMS ได้รับ 1-2 วัน นับจากวันจัดส่ง
วันจันทร์-ศุกร์ แจ้งโอนก่อน 14.00 น. จัดส่งวันนั้น
แจ้งโอนวันศุกร์ หลัง 14.00 น. และวันเสาร์ จัดส่งวันอาทิตย์
แจ้งโอนวันอาทิตย์ จัดส่งวันจันทร์
ขาย Arduino การตรวจสอบเลขแทรคสินค้า Arduino
ขาย Arduino ใบกำกับภาษี
ขาย Arduino สินค้าทุกชิ้นที่ซื้อกับทางร้าน AllNewStep
สามารถนำไปเบิกกับ หน่วยงานราชการ บริษัท ห้างร้าน ได้อย่างถูกต้อง จึงซื้อได้อย่างมั่นใจ
กรณีที่ไม่ได้นำไปใช้เบิก
สามารถติ๊กออก ข้ามช่องนี้ไม่ต้องกรอกได้ ทางร้านออกเป็น ใบเสร็จรับเงิน / ใบกำกับภาษีฉบับย่อให้ แนบไปพร้อมกับสินค้า
ขาย Arduino ใบกำกับภาษีเต็มรูปแบบ
สำคัญมาก "ข้อมูลใบกำกับภาษีไม่สามารถเปลี่ยนแปลงหรือแก้ไขได้หลังการสั่งซื้อสินค้า"
ขาย Arduino ทางร้าน AllNewStep ออกใบกำกับภาษี/ใบเสร็จรับเงิน ลงวันที่ ที่แจ้งชำระสินค้าให้ลูกค้าทุกครั้งที่ทำรายการสั่งซื้อโดยแนบไปพร้อมสินค้า
ขาย Arduino ข้อมูลสำหรับออกใบกำกับภาษี
ขาย Arduino โปรดตรวจสอบข้อมูลเหล่านี้ให้ชัดเจน ก่อนกรอกข้อมูล เพราะใบกำกับภาษีไม่สามารถเปลี่ยนแปลง หรือแก้ไขได้หลังซื้อสินค้า
*** สำคัญมาก :: ข้อมูลจะต้องมีครบทั้ง 4 อย่างนี้ ถ้าไม่ครบ ทางร้านจำเป็นต้องออกใบกำกับภาษีอย่างย่อ เนื่องจากข้อมูลไม่ครบ
ขาย Arduino วิธีการชำระเงิน
ชำระเงินผ่านธนาคาร เรามีหลายธนาคารให้เลือก ขาย Arduino เพื่ออำนวยความสะดวกให้กับลูกค้า
การทำธุรกรรมของธนาคารต่างสาขาหรือต่างธนาคาร จะมีค่าธรรมเนียมเพิ่ม แล้วแต่ธนาคาร กรณีมีค่าธรรมเนียมรายได้เป็นของธนาคาร ทางร้านไม่ได้ออกค่าธรรมเนียมให้
ถ้าทำธุรกรรมภายในธนาคารเดียวกัน จะเสียค่าธรรมเนียมน้อยที่สุดหรือไม่เสียเลย บางธนาคารจะไม่คิดค่าธรรมเนียมโดยจำกัดว่าฟรีได้กี่ครั้งใน 1 เดือน เช่นฟรีค่าธรรมเนียมเมื่อโอนในธนาคารเดียวกัน 5 ครั้ง/เดือน ผ่านทางตู้ ATM
ดังนั้น ควรเลือกโอนมาที่ธนาคารเดียวกัน จะเสียค่าธรรมเนียมน้อยที่สุดหรือไม่เสียค่าธรรมเนียมตามเงื่อนไขที่ธนาคารกำหนด
ขาย Arduino เมื่อชำระเงินผ่านธนาคารแล้ว
กรุณาแจ้งที่หน้า แจ้งชำระเงิน https://www.allnewstep.com/informpayment
พร้อมแนบสลิป หรือภาพหน้าจอการโอนที่สำเร็จแล้ว ด้วยทุกครั้ง
เพื่อเป็นหลักฐาน และเก็บสลิปหลักฐานการโอนเงินไว้จนกว่าจะได้รับสินค้า
กรณีที่ธนาคารสลิปหมด หรือไม่มีสลิป สามารถแจ้งข้อความ รายละเอียดการโอนเงินได้ที่ เมนู ติดต่อ AllNewStep https://www.allnewstep.com/contactus ทางร้านจะดำเนินการตรวจสอบและรีบจัดส่งให้เร็วที่สุด
แนะนำจ่ายเงินผ่าน PromtPay ฟรีค่าธรรมเนียม หรือน้อยที่สุด Recomment
สแกน QR Code นี่จ่ายได้เลย
ขาย Arduino AllNewStep มีอุปกรณ์สำหรับ Arduio ครบทุกอย่างที่อยากได้ จากทุกแห่งทั่วโลก ในราคาที่ถูกที่สุด รับประกันคุณภาพ เสียเปลี่ยนตัวใหม่ให้ทันที ไม่ต้องรอ ไม่ต้องเสียค่าส่งสินค้ามาเคลม ขาย Arduino ตามรายละเอียดการรับประกันด้านล่างนี้
สินค้าทุกชิ้นมีรับประกัน 30 วัน ซื้อสินค้าจาก AllNewStep มั่นใจได้ รับประกันคุณภาพ ด้วยการมีประกันสินค้าที่ดีกว่าเราได้ตรวจเช็คและรับประกันสินค้าซื้อไปใช้ได้อย่างมั่นใจและสบายใจ เพื่อให้ลูกค้าถูกใจที่สุด
ทั้ง นี้หากมีสินค้าที่ได้รับมีความผิดพลาดอันใด ที่อาจเกิดขึ้นได้ ไม่ว่าจะเป็นอุปกรณ์เสีย หรือความเสียหายระหว่างการส่ง โดยที่ลูกค้าไม่ได้เป็นคนกระทำ AllNewStep รับประกันเปลี่ยนตัวใหม่ให้ทันที ภายใน 30 วันหลังจากได้รับสินค้า พร้อมออกค่าส่งสินค้าให้ ทั้งค่าส่งมา และค่าส่งกลับ ลูกค้าไม่ต้องรับภาระเรื่องค่าจัดส่ง โดยสามารถใช้กล่องเดิมส่งมาได้ โดยมีเงื่อนไขดังนี้