var ewww_webp_supported=!1;function check_webp_feature(A,e){var w;e=void 0!==e?e:function(){},ewww_webp_supported?e(ewww_webp_supported):((w=new Image).onload=function(){ewww_webp_supported=0<w.width&&0<w.height,e&&e(ewww_webp_supported)},w.onerror=function(){e&&e(!1)},w.src="data:image/webp;base64,"+{alpha:"UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAARBxAR/Q9ERP8DAABWUDggGAAAABQBAJ0BKgEAAQAAAP4AAA3AAP7mtQAAAA=="}[A])}check_webp_feature("alpha");
var Arrive=function(c,w){"use strict";if(c.MutationObserver&&"undefined"!=typeof HTMLElement){var r,a=0,u=(r=HTMLElement.prototype.matches||HTMLElement.prototype.webkitMatchesSelector||HTMLElement.prototype.mozMatchesSelector||HTMLElement.prototype.msMatchesSelector,{matchesSelector:function(e,t){return e instanceof HTMLElement&&r.call(e,t)},addMethod:function(e,t,r){var a=e[t];e[t]=function(){return r.length==arguments.length?r.apply(this,arguments):"function"==typeof a?a.apply(this,arguments):void 0}},callCallbacks:function(e,t){t&&t.options.onceOnly&&1==t.firedElems.length&&(e=[e[0]]);for(var r,a=0;r=e[a];a++)r&&r.callback&&r.callback.call(r.elem,r.elem);t&&t.options.onceOnly&&1==t.firedElems.length&&t.me.unbindEventWithSelectorAndCallback.call(t.target,t.selector,t.callback)},checkChildNodesRecursively:function(e,t,r,a){for(var i,n=0;i=e[n];n++)r(i,t,a)&&a.push({callback:t.callback,elem:i}),0<i.childNodes.length&&u.checkChildNodesRecursively(i.childNodes,t,r,a)},mergeArrays:function(e,t){var r,a={};for(r in e)e.hasOwnProperty(r)&&(a[r]=e[r]);for(r in t)t.hasOwnProperty(r)&&(a[r]=t[r]);return a},toElementsArray:function(e){return e=void 0!==e&&("number"!=typeof e.length||e===c)?[e]:e}}),e=(l.prototype.addEvent=function(e,t,r,a){a={target:e,selector:t,options:r,callback:a,firedElems:[]};return this._beforeAdding&&this._beforeAdding(a),this._eventsBucket.push(a),a},l.prototype.removeEvent=function(e){for(var t,r=this._eventsBucket.length-1;t=this._eventsBucket[r];r--)e(t)&&(this._beforeRemoving&&this._beforeRemoving(t),(t=this._eventsBucket.splice(r,1))&&t.length&&(t[0].callback=null))},l.prototype.beforeAdding=function(e){this._beforeAdding=e},l.prototype.beforeRemoving=function(e){this._beforeRemoving=e},l),t=function(i,n){var o=new e,l=this,s={fireOnAttributesModification:!1};return o.beforeAdding(function(t){var e=t.target;e!==c.document&&e!==c||(e=document.getElementsByTagName("html")[0]);var r=new MutationObserver(function(e){n.call(this,e,t)}),a=i(t.options);r.observe(e,a),t.observer=r,t.me=l}),o.beforeRemoving(function(e){e.observer.disconnect()}),this.bindEvent=function(e,t,r){t=u.mergeArrays(s,t);for(var a=u.toElementsArray(this),i=0;i<a.length;i++)o.addEvent(a[i],e,t,r)},this.unbindEvent=function(){var r=u.toElementsArray(this);o.removeEvent(function(e){for(var t=0;t<r.length;t++)if(this===w||e.target===r[t])return!0;return!1})},this.unbindEventWithSelectorOrCallback=function(r){var a=u.toElementsArray(this),i=r,e="function"==typeof r?function(e){for(var t=0;t<a.length;t++)if((this===w||e.target===a[t])&&e.callback===i)return!0;return!1}:function(e){for(var t=0;t<a.length;t++)if((this===w||e.target===a[t])&&e.selector===r)return!0;return!1};o.removeEvent(e)},this.unbindEventWithSelectorAndCallback=function(r,a){var i=u.toElementsArray(this);o.removeEvent(function(e){for(var t=0;t<i.length;t++)if((this===w||e.target===i[t])&&e.selector===r&&e.callback===a)return!0;return!1})},this},i=new function(){var s={fireOnAttributesModification:!1,onceOnly:!1,existing:!1};function n(e,t,r){return!(!u.matchesSelector(e,t.selector)||(e._id===w&&(e._id=a++),-1!=t.firedElems.indexOf(e._id)))&&(t.firedElems.push(e._id),!0)}var c=(i=new t(function(e){var t={attributes:!1,childList:!0,subtree:!0};return e.fireOnAttributesModification&&(t.attributes=!0),t},function(e,i){e.forEach(function(e){var t=e.addedNodes,r=e.target,a=[];null!==t&&0<t.length?u.checkChildNodesRecursively(t,i,n,a):"attributes"===e.type&&n(r,i)&&a.push({callback:i.callback,elem:r}),u.callCallbacks(a,i)})})).bindEvent;return i.bindEvent=function(e,t,r){t=void 0===r?(r=t,s):u.mergeArrays(s,t);var a=u.toElementsArray(this);if(t.existing){for(var i=[],n=0;n<a.length;n++)for(var o=a[n].querySelectorAll(e),l=0;l<o.length;l++)i.push({callback:r,elem:o[l]});if(t.onceOnly&&i.length)return r.call(i[0].elem,i[0].elem);setTimeout(u.callCallbacks,1,i)}c.call(this,e,t,r)},i},o=new function(){var a={};function i(e,t){return u.matchesSelector(e,t.selector)}var n=(o=new t(function(){return{childList:!0,subtree:!0}},function(e,r){e.forEach(function(e){var t=e.removedNodes,e=[];null!==t&&0<t.length&&u.checkChildNodesRecursively(t,r,i,e),u.callCallbacks(e,r)})})).bindEvent;return o.bindEvent=function(e,t,r){t=void 0===r?(r=t,a):u.mergeArrays(a,t),n.call(this,e,t,r)},o};d(HTMLElement.prototype),d(NodeList.prototype),d(HTMLCollection.prototype),d(HTMLDocument.prototype),d(Window.prototype);var n={};return s(i,n,"unbindAllArrive"),s(o,n,"unbindAllLeave"),n}function l(){this._eventsBucket=[],this._beforeAdding=null,this._beforeRemoving=null}function s(e,t,r){u.addMethod(t,r,e.unbindEvent),u.addMethod(t,r,e.unbindEventWithSelectorOrCallback),u.addMethod(t,r,e.unbindEventWithSelectorAndCallback)}function d(e){e.arrive=i.bindEvent,s(i,e,"unbindArrive"),e.leave=o.bindEvent,s(o,e,"unbindLeave")}}(window,void 0),ewww_webp_supported=!1;function check_webp_feature(e,t){var r;ewww_webp_supported?t(ewww_webp_supported):((r=new Image).onload=function(){ewww_webp_supported=0<r.width&&0<r.height,t(ewww_webp_supported)},r.onerror=function(){t(!1)},r.src="data:image/webp;base64,"+{alpha:"UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAARBxAR/Q9ERP8DAABWUDggGAAAABQBAJ0BKgEAAQAAAP4AAA3AAP7mtQAAAA==",animation:"UklGRlIAAABXRUJQVlA4WAoAAAASAAAAAAAAAAAAQU5JTQYAAAD/////AABBTk1GJgAAAAAAAAAAAAAAAAAAAGQAAABWUDhMDQAAAC8AAAAQBxAREYiI/gcA"}[e])}function ewwwLoadImages(e){if(e){for(var t=document.querySelectorAll(".batch-image img, .image-wrapper a, .ngg-pro-masonry-item a, .ngg-galleria-offscreen-seo-wrapper a"),r=0,a=t.length;r<a;r++)ewwwAttr(t[r],"data-src",t[r].getAttribute("data-webp")),ewwwAttr(t[r],"data-thumbnail",t[r].getAttribute("data-webp-thumbnail"));for(var i=document.querySelectorAll("div.woocommerce-product-gallery__image"),r=0,a=i.length;r<a;r++)ewwwAttr(i[r],"data-thumb",i[r].getAttribute("data-webp-thumb"))}for(var n=document.querySelectorAll("video"),r=0,a=n.length;r<a;r++)ewwwAttr(n[r],"poster",e?n[r].getAttribute("data-poster-webp"):n[r].getAttribute("data-poster-image"));for(var o,l=document.querySelectorAll("img.ewww_webp_lazy_load"),r=0,a=l.length;r<a;r++)e&&(ewwwAttr(l[r],"data-lazy-srcset",l[r].getAttribute("data-lazy-srcset-webp")),ewwwAttr(l[r],"data-srcset",l[r].getAttribute("data-srcset-webp")),ewwwAttr(l[r],"data-lazy-src",l[r].getAttribute("data-lazy-src-webp")),ewwwAttr(l[r],"data-src",l[r].getAttribute("data-src-webp")),ewwwAttr(l[r],"data-orig-file",l[r].getAttribute("data-webp-orig-file")),ewwwAttr(l[r],"data-medium-file",l[r].getAttribute("data-webp-medium-file")),ewwwAttr(l[r],"data-large-file",l[r].getAttribute("data-webp-large-file")),null!=(o=l[r].getAttribute("srcset"))&&!1!==o&&o.includes("R0lGOD")&&ewwwAttr(l[r],"src",l[r].getAttribute("data-lazy-src-webp"))),l[r].className=l[r].className.replace(/\bewww_webp_lazy_load\b/,"");for(var s=document.querySelectorAll(".ewww_webp"),r=0,a=s.length;r<a;r++)e?(ewwwAttr(s[r],"srcset",s[r].getAttribute("data-srcset-webp")),ewwwAttr(s[r],"src",s[r].getAttribute("data-src-webp")),ewwwAttr(s[r],"data-orig-file",s[r].getAttribute("data-webp-orig-file")),ewwwAttr(s[r],"data-medium-file",s[r].getAttribute("data-webp-medium-file")),ewwwAttr(s[r],"data-large-file",s[r].getAttribute("data-webp-large-file")),ewwwAttr(s[r],"data-large_image",s[r].getAttribute("data-webp-large_image")),ewwwAttr(s[r],"data-src",s[r].getAttribute("data-webp-src"))):(ewwwAttr(s[r],"srcset",s[r].getAttribute("data-srcset-img")),ewwwAttr(s[r],"src",s[r].getAttribute("data-src-img"))),s[r].className=s[r].className.replace(/\bewww_webp\b/,"ewww_webp_loaded");window.jQuery&&jQuery.fn.isotope&&jQuery.fn.imagesLoaded&&(jQuery(".fusion-posts-container-infinite").imagesLoaded(function(){jQuery(".fusion-posts-container-infinite").hasClass("isotope")&&jQuery(".fusion-posts-container-infinite").isotope()}),jQuery(".fusion-portfolio:not(.fusion-recent-works) .fusion-portfolio-wrapper").imagesLoaded(function(){jQuery(".fusion-portfolio:not(.fusion-recent-works) .fusion-portfolio-wrapper").isotope()}))}function ewwwWebPInit(e){ewwwLoadImages(e),ewwwNggLoadGalleries(e),document.arrive(".ewww_webp",function(){ewwwLoadImages(e)}),document.arrive(".ewww_webp_lazy_load",function(){ewwwLoadImages(e)}),document.arrive("videos",function(){ewwwLoadImages(e)}),"loading"==document.readyState?document.addEventListener("DOMContentLoaded",ewwwJSONParserInit):("undefined"!=typeof galleries&&ewwwNggParseGalleries(e),ewwwWooParseVariations(e))}function ewwwAttr(e,t,r){null!=r&&!1!==r&&e.setAttribute(t,r)}function ewwwJSONParserInit(){"undefined"!=typeof galleries&&check_webp_feature("alpha",ewwwNggParseGalleries),check_webp_feature("alpha",ewwwWooParseVariations)}function ewwwWooParseVariations(e){if(e)for(var t=document.querySelectorAll("form.variations_form"),r=0,a=t.length;r<a;r++){var i=t[r].getAttribute("data-product_variations"),n=!1;try{for(var o in i=JSON.parse(i))void 0!==i[o]&&void 0!==i[o].image&&(void 0!==i[o].image.src_webp&&(i[o].image.src=i[o].image.src_webp,n=!0),void 0!==i[o].image.srcset_webp&&(i[o].image.srcset=i[o].image.srcset_webp,n=!0),void 0!==i[o].image.full_src_webp&&(i[o].image.full_src=i[o].image.full_src_webp,n=!0),void 0!==i[o].image.gallery_thumbnail_src_webp&&(i[o].image.gallery_thumbnail_src=i[o].image.gallery_thumbnail_src_webp,n=!0),void 0!==i[o].image.thumb_src_webp&&(i[o].image.thumb_src=i[o].image.thumb_src_webp,n=!0));n&&ewwwAttr(t[r],"data-product_variations",JSON.stringify(i))}catch(e){}}}function ewwwNggParseGalleries(e){if(e)for(var t in galleries){var r=galleries[t];galleries[t].images_list=ewwwNggParseImageList(r.images_list)}}function ewwwNggLoadGalleries(e){e&&document.addEventListener("ngg.galleria.themeadded",function(e,t){window.ngg_galleria._create_backup=window.ngg_galleria.create,window.ngg_galleria.create=function(e,t){var r=$(e).data("id");return galleries["gallery_"+r].images_list=ewwwNggParseImageList(galleries["gallery_"+r].images_list),window.ngg_galleria._create_backup(e,t)}})}function ewwwNggParseImageList(e){for(var t in e){var r=e[t];if(void 0!==r["image-webp"]&&(e[t].image=r["image-webp"],delete e[t]["image-webp"]),void 0!==r["thumb-webp"]&&(e[t].thumb=r["thumb-webp"],delete e[t]["thumb-webp"]),void 0!==r.full_image_webp&&(e[t].full_image=r.full_image_webp,delete e[t].full_image_webp),void 0!==r.srcsets)for(var a in r.srcsets)nggSrcset=r.srcsets[a],void 0!==r.srcsets[a+"-webp"]&&(e[t].srcsets[a]=r.srcsets[a+"-webp"],delete e[t].srcsets[a+"-webp"]);if(void 0!==r.full_srcsets)for(var i in r.full_srcsets)nggFSrcset=r.full_srcsets[i],void 0!==r.full_srcsets[i+"-webp"]&&(e[t].full_srcsets[i]=r.full_srcsets[i+"-webp"],delete e[t].full_srcsets[i+"-webp"])}return e}check_webp_feature("alpha",ewwwWebPInit);
window._nslDOMReady = (function () {
const executedCallbacks = new Set();
return function (callback) {
/**
* Third parties might dispatch DOMContentLoaded events, so we need to ensure that we only run our callback once!
*/
if (executedCallbacks.has(callback)) return;
const wrappedCallback = function () {
if (executedCallbacks.has(callback)) return;
executedCallbacks.add(callback);
callback();
};
if (document.readyState === "complete" || document.readyState === "interactive") {
wrappedCallback();
} else {
document.addEventListener("DOMContentLoaded", wrappedCallback);
}
};
})();
var wc_single_product_params = {"i18n_required_rating_text":"Please select a rating","i18n_rating_options":["1 of 5 stars","2 of 5 stars","3 of 5 stars","4 of 5 stars","5 of 5 stars"],"i18n_product_gallery_trigger_text":"View full-screen image gallery","review_rating_required":"yes","flexslider":{"rtl":false,"animation":"slide","smoothHeight":true,"directionNav":false,"controlNav":false,"slideshow":false,"animationSpeed":500,"animationLoop":false,"allowOneSlide":false},"zoom_enabled":"","zoom_options":[],"photoswipe_enabled":"1","photoswipe_options":{"shareEl":false,"closeOnScroll":false,"history":false,"hideAnimationDuration":0,"showAnimationDuration":0},"flexslider_enabled":"1"};
//# sourceURL=wc-single-product-js-extra
fbq('init', '1153287051360427', {}, {
"agent": "woocommerce_6-10.7.0-3.6.3"
});
document.addEventListener( 'DOMContentLoaded', function() {
// Insert placeholder for events injected when a product is added to the cart through AJAX.
document.body.insertAdjacentHTML( 'beforeend', '<div class=\"wc-facebook-pixel-event-placeholder\"></div>' );
}, false );
The ESP32-CAM module comes with the well-known high-performance Espressif ESP32 Wifi+Bluetooth+BLE controller chip and an OV2640 camera module with 2MP resolution.
Specifications:
- Main frequency up to 240MHz, up to 600 DMIPS
- 520 KB SRAM, 2M PSRAM
- UART/SPI/I2C/PWM/ADC/DAC Interfaces
- Micro-SD memory card slot
- Lwip and FreeRTOS operating system
- Supports Smart Config/AirKiss one-click distribution network
- OmniVision OV2640 camera module included (1600 x 1200 px)
Camera Lens Options (available in our store):
- 65-75° (included with ESP32-CAM module)
- 120° Wide Angle (SKU 26658)
- 160° Fisheye horizontal (SKU 26659)
The ESP32-CAM module comes in a very small form factor of just 27 x 40mm and fits perfectly on a breadboard for your experiments. We recommend GitHub for software downloads and code examples.
This is the recommended first step to start tinkering with it:
-Â Follow the instructions on this website: Randomnerdtutorials.com
- Select "AI Thinker ESP32-CAM" as the board in Arduino IDE
- Change communication speed to 115200
- Select the corresponding COM port in Arduino IDE
- Uploading the code for the cam server demo provided on the website using Arduino IDE:
a) the upload starts possibly automatically, then wait until it has finished
b) Arduino IDE shows "connecting..." and the upload only starts after pressing "reset" on your ESP32 module
- Keep following the procedure described in the tutorial
If you receive an error message "detected camera not supported" you should double-check that the selected module in your sketch is "AI Thinker".
These camera modules can be a little more tricky than an Arduino UNO. Don't give up, keep trying, reading, and trying again, if it doesn't work right away.
7 reviews for ESP32-CAM - WiFi Bluetooth BLE Module with 2MP Camera
Rated 4 out of 5
john.witherspoon –
Just received this board and confirmed it works as advertised without difficulty. I just followed the Random Nerd tutorial as linked in the description. I obtained a surprisingly sharp image on my browser using the Arduino example code – this is quite a sophisticated example with many detailed controls including face recognition.
Note that I needed a 5V FTDI to program it. Also, the board is not exactly breadboard friendly since the reset button must be pressed to upload and it’s below the circuit board when attached to a breadboard. The reset isn’t brought out to a pin so its a little awkward to program. I needed 4 m-f and one m-m dupont jumpers to wire to the FTDI Basic board.
Rated 5 out of 5
GDW –
Works like expected. I used the ESP32 demo software that gets installed in the IDE when you add ESP32 board support, which worked great. I also tried a variety of code from the randomtutorial website with no problems. Don’t forget to gently pull the clip down and out to open the camera connecter, not up, it can break, you only need a tiny bit of force. Nice to support a Canadian company too.
Rated 4 out of 5
John Doe –
I installed Tasmota esp32 webcam on it, and it’s basically functional. When a typical webcam in the same lighting condition gives decent image, this camera’s image is just too dark.
Rated 5 out of 5
James Zahary –
Terrific Device! Plenty of software at github to program this for facial recognition, or make a movie camera!
Rated 5 out of 5
Greg in Kanata –
If Dr. Evil wouldn’t mind having a hobby type henchman, then these little things would make a great way to turn something off. Yup. Sorry kid. but Alexa turned off your internet because it is 4am…. Meanwhile it turns on the coffee and if that toaster would pop out another idea then this would be the way to go.
Rated 5 out of 5
Bruce –
Quite happy with it! I’ve got a few places i can use these, so i may have to order more.
Rated 5 out of 5
Nathan Mullin –
Works no issue for me, programming can be a bit tricky as you need to hold GPIO0 to ground and press reset when uploading starts. Also note most FTDI boards will not supply enough amps to power this. I’ve powered the 5v rail with a 700ma supply and it powers it ok, 200ma does not seem to suffice. Keep in mind you will need an arduino, esp, or FTDI to program this. Seller does state this in description.
Only logged in customers who have purchased this product may leave a review.
Shopping Cart
Never Miss The Deals.
If you already receive our newsletter, please just close this popup. We try not to show it again.
Scroll to Top
document.addEventListener('DOMContentLoaded', function() {
setTimeout(function() {
let shipOption = document.querySelector('.wc-block-checkout__shipping-method-option:not(.wc-block-checkout__shipping-method-option--selected)');
let pickupOption = document.querySelector('.wc-block-checkout__shipping-method-option--selected');
if (shipOption && pickupOption) {
pickupOption.classList.remove('wc-block-checkout__shipping-method-option--selected');
shipOption.classList.add('wc-block-checkout__shipping-method-option--selected');
// Simulate click to trigger WooCommerce's logic
shipOption.click();
}
}, 500); // Delay ensures WooCommerce has rendered the elements
});
jQuery(document).ready(function($) {
setTimeout(function() {
var checkbox = $('.wc-block-components-checkbox__input'); // Target the checkbox
if (checkbox.length && !checkbox.prop('checked')) {
checkbox.prop('checked', true).trigger('change'); // Check the box and trigger change event
}
}, 500); // Delay to ensure WooCommerce blocks are loaded
});
(function() {
// Global page view and session tracking for UAEL Modal Popup feature
try {
// Session tracking: increment if this is a new session
// Check if any popup on this page uses current page tracking
var hasCurrentPageTracking = false;
var currentPagePopups = [];
// Check all modal popups on this page for current page tracking
if (typeof jQuery !== 'undefined') {
jQuery('.uael-modal-parent-wrapper').each(function() {
var scope = jQuery(this).data('page-views-scope');
var enabled = jQuery(this).data('page-views-enabled');
var popupId = jQuery(this).attr('id').replace('-overlay', '');
if (enabled === 'yes' && scope === 'current') {
hasCurrentPageTracking = true;
currentPagePopups.push(popupId);
}
});
}
// Global tracking: ALWAYS increment if ANY popup on the site uses global tracking
// Current page tracking: increment per-page counters
if (hasCurrentPageTracking && currentPagePopups.length > 0) {
var currentUrl = window.location.href;
var urlKey = 'uael_page_views_' + btoa(currentUrl).replace(/[^a-zA-Z0-9]/g, '').substring(0, 50);
var currentPageViews = parseInt(localStorage.getItem(urlKey) || '0');
currentPageViews++;
localStorage.setItem(urlKey, currentPageViews.toString());
// Store URL mapping for each popup
for (var i = 0; i < currentPagePopups.length; i++) {
var popupUrlKey = 'uael_popup_' + currentPagePopups[i] + '_url_key';
localStorage.setItem(popupUrlKey, urlKey);
}
}
} catch (e) {
// Silently fail if localStorage is not available
}
})();
window.storeagentChat = {
nonce: "4a3f31d4f4",
pageContext: {
title: "ESP32-CAM - WiFi Bluetooth BLE Module with 2MP Camera",
type: "product"
},
feedbackTexts: {
promptText: "Would you mind rating your experience with me?",
skipButtonText: "Skip"
}
};
var astra = {"break_point":"921","isRtl":"","is_scroll_to_id":"","is_scroll_to_top":"1","is_header_footer_builder_active":"1","responsive_cart_click":"flyout","is_dark_palette":"","edit_post_url":"https://www.universal-solder.ca/wp-admin/post.php?post={{id}}&action=edit","ajax_url":"https://www.universal-solder.ca/wp-admin/admin-ajax.php","shop_infinite_count":"2","shop_infinite_total":"0","shop_total_products":"1","shop_pagination":"number","shop_infinite_scroll_event":"click","shop_no_more_post_message":"No more products to show.","shop_result_count_format":"Showing 1\u2013{count} of {total} results","checkout_prev_text":"Back to my details","checkout_next_text":"Proceed to payment","show_comments":"Show Comments","shop_quick_view_enable":"on-image","shop_quick_view_stick_cart":"","shop_quick_view_auto_height":"1","woo_cart_empty_featured_product":"","single_product_qty_ajax_nonce":"1b9c44b431","quick_view_nonce":"4050e26d1a","single_product_ajax_add_to_cart":"1","is_cart":"","is_single_product":"1","view_cart":"View cart","cart_url":"https://www.universal-solder.ca/cart/","checkout_url":"https://www.universal-solder.ca/checkout/","add_to_cart_options_single":"rt_add_to_cart","is_astra_pro":"1","shopRevealEffectEnable":""};
//# sourceURL=astra-theme-js-js-extra
var PayPalCommerceGateway = {"url":"https://www.paypal.com/sdk/js?client-id=BAAVwOOBwAshKbZYngRagbITamdh5azmNPzdkCKAO002JWyKNFlmpK4QYkiyKOoW1RR0ibwp-EwtFzjBPY¤cy=CAD&integration-date=2026-04-01&components=buttons,funding-eligibility,messages&vault=true&commit=false&intent=capture&disable-funding=card&enable-funding=venmo,paylater","url_params":{"client-id":"BAAVwOOBwAshKbZYngRagbITamdh5azmNPzdkCKAO002JWyKNFlmpK4QYkiyKOoW1RR0ibwp-EwtFzjBPY","currency":"CAD","integration-date":"2026-04-01","components":"buttons,funding-eligibility,messages","vault":"true","commit":"false","intent":"capture","disable-funding":"bancontact,blik,eps,ideal,mybank,p24,trustly,multibanco,card","enable-funding":"venmo,paylater"},"script_attributes":{"data-partner-attribution-id":"Woo_PPCP","data-page-type":"product-details"},"client_id":"BAAVwOOBwAshKbZYngRagbITamdh5azmNPzdkCKAO002JWyKNFlmpK4QYkiyKOoW1RR0ibwp-EwtFzjBPY","currency":"CAD","data_client_id":{"set_attribute":true,"endpoint":"/?wc-ajax=ppc-data-client-id","nonce":"0fd10340d5","user":0,"has_subscriptions":false,"paypal_subscriptions_enabled":false},"redirect":"https://www.universal-solder.ca/checkout/","context":"product","ajax":{"simulate_cart":{"endpoint":"/?wc-ajax=ppc-simulate-cart","nonce":"e8db614d01"},"change_cart":{"endpoint":"/?wc-ajax=ppc-change-cart","nonce":"d6ef8812a5"},"create_order":{"endpoint":"/?wc-ajax=ppc-create-order","nonce":"80627e9f1e"},"approve_order":{"endpoint":"/?wc-ajax=ppc-approve-order","nonce":"b0d8126a49"},"get_order":{"endpoint":"/?wc-ajax=ppc-get-order","nonce":"cd7d6a3bfd"},"approve_subscription":{"endpoint":"/?wc-ajax=ppc-approve-subscription","nonce":"dfa9c0774e"},"vault_paypal":{"endpoint":"/?wc-ajax=ppc-vault-paypal","nonce":"9feb733242"},"save_checkout_form":{"endpoint":"/?wc-ajax=ppc-save-checkout-form","nonce":"e7ed4ef02a"},"validate_checkout":{"endpoint":"/?wc-ajax=ppc-validate-checkout","nonce":"b9505c1c31"},"cart_script_params":{"endpoint":"/?wc-ajax=ppc-cart-script-params"},"create_setup_token":{"endpoint":"/?wc-ajax=ppc-create-setup-token","nonce":"349a418b4a"},"create_payment_token":{"endpoint":"/?wc-ajax=ppc-create-payment-token","nonce":"c5e868e97d"},"create_payment_token_for_guest":{"endpoint":"/?wc-ajax=ppc-update-customer-id","nonce":"ca49e3e098"},"update_shipping":{"endpoint":"/?wc-ajax=ppc-update-shipping","nonce":"7507d950a7"},"update_customer_shipping":{"shipping_options":{"endpoint":"https://www.universal-solder.ca/wp-json/wc/store/v1/cart/select-shipping-rate"},"shipping_address":{"cart_endpoint":"https://www.universal-solder.ca/wp-json/wc/store/v1/cart/","update_customer_endpoint":"https://www.universal-solder.ca/wp-json/wc/store/v1/cart/update-customer"},"wp_rest_nonce":"aed2676082","update_shipping_method":"/?wc-ajax=update_shipping_method"}},"cart_contains_subscription":"","subscription_plan_id":"","vault_v3_enabled":"1","variable_paypal_subscription_variations":[],"variable_paypal_subscription_variation_from_cart":"","subscription_product_allowed":"","locations_with_subscription_product":{"product":false,"payorder":false,"cart":false},"enforce_vault":"","can_save_vault_token":"1","is_free_trial_cart":"","bn_codes":{"checkout":"Woo_PPCP","cart":"Woo_PPCP","mini-cart":"Woo_PPCP","product":"Woo_PPCP"},"payer":null,"button":{"wrapper":"#ppc-button-ppcp-gateway","is_disabled":false,"mini_cart_wrapper":"#ppc-button-minicart","is_mini_cart_disabled":false,"cancel_wrapper":"#ppcp-cancel","mini_cart_style":{"layout":"vertical","color":"gold","shape":"rect","label":"pay","tagline":false,"height":35},"style":{"layout":"vertical","color":"gold","shape":"rect","label":"pay","tagline":false}},"separate_buttons":{"card":{"id":"ppcp-card-button-gateway","wrapper":"#ppc-button-ppcp-card-button-gateway","style":{"shape":"rect","color":"black","layout":"horizontal"}}},"hosted_fields":{"wrapper":"#ppcp-hosted-fields","labels":{"credit_card_number":"","cvv":"","mm_yy":"MM/YY","fields_empty":"Card payment details are missing. Please fill in all required fields.","fields_not_valid":"Unfortunately, your credit card details are not valid.","card_not_supported":"Unfortunately, we do not support your credit card.","cardholder_name_required":"Cardholder's first and last name are required, please fill the checkout form required fields."},"valid_cards":["mastercard","visa","amex","jcb","american-express","master-card"],"contingency":"NO_3D_SECURE"},"messages":{"wrapper":".ppcp-messages","is_hidden":false,"block":{"enabled":false},"amount":19.2,"placement":"product","style":{"layout":"text","logo":{"type":"inline","position":"left"},"text":{"color":"black","size":"12"},"color":"black","ratio":"8x1"}},"labels":{"error":{"generic":"Something went wrong. Please try again or choose another payment source.","required":{"generic":"Required form fields are not filled.","field":"%s is a required field.","elements":{"terms":"Please read and accept the terms and conditions to proceed with your order."}}},"billing_field":"Billing %s","shipping_field":"Shipping %s"},"simulate_cart":{"enabled":true,"throttling":5000},"order_id":"0","order_key":"","single_product_buttons_enabled":"1","mini_cart_buttons_enabled":"","basic_checkout_validation_enabled":"","early_checkout_validation_enabled":"1","funding_sources_without_redirect":["paypal","paylater","venmo","card"],"user":{"is_logged":false,"has_wc_card_payment_tokens":false},"should_handle_shipping_in_paypal":"","server_side_shipping_callback":{"enabled":true},"appswitch":{"enabled":true},"needShipping":"","vaultingEnabled":"1","productType":"simple","manualRenewalEnabled":"","final_review_enabled":"1"};
//# sourceURL=ppcp-smart-button-js-extra
var woosb_vars = {"wc_price_decimals":"2","wc_price_format":"%1$s%2$s","wc_price_thousand_separator":",","wc_price_decimal_separator":".","wc_currency_symbol":"C$","price_decimals":"2","price_format":"%1$s%2$s","price_thousand_separator":",","price_decimal_separator":".","currency_symbol":"C$","trim_zeros":"","round_price":"1","recalc_price":"","change_image":"no","bundled_price":"no","bundled_price_from":"regular_price","change_price":"no","price_selector":".summary \u003E .price","saved_text":"(saved [d])","price_text":"Bundle price:","selected_text":"Selected:","alert_selection":"Please select a purchasable variation for [name] before adding this bundle to the cart.","alert_unpurchasable":"Product [name] is unpurchasable. Please remove it before adding the bundle to the cart.","alert_empty":"Please choose at least one product before adding this bundle to the cart.","alert_min":"Please choose at least a total quantity of [min] products before adding this bundle to the cart.","alert_max":"Sorry, you can only choose at max a total quantity of [max] products before adding this bundle to the cart.","alert_total_min":"The total must meet the minimum amount of [min].","alert_total_max":"The total must meet the maximum amount of [max]."};
//# sourceURL=woosb-frontend-js-extra
var glaGtagData = {"currency_minor_unit":"2","products":{"3017":{"name":"ESP32-CAM - WiFi Bluetooth BLE Module with 2MP Camera","price":16.99}}};
//# sourceURL=gla-gtag-events-js-extra
var wc_add_to_cart_variation_params = {"wc_ajax_url":"/?wc-ajax=%%endpoint%%","i18n_no_matching_variations_text":"Sorry, no products matched your selection. Please choose a different combination.","i18n_make_a_selection_text":"Please select some product options before adding this product to your cart.","i18n_unavailable_text":"Sorry, this product is unavailable. Please choose a different combination.","i18n_reset_alert_text":"Your selection has been reset. Please select some product options before adding this product to your cart."};
//# sourceURL=wc-add-to-cart-variation-js-extra
john.witherspoon –
Just received this board and confirmed it works as advertised without difficulty. I just followed the Random Nerd tutorial as linked in the description. I obtained a surprisingly sharp image on my browser using the Arduino example code – this is quite a sophisticated example with many detailed controls including face recognition.
Note that I needed a 5V FTDI to program it. Also, the board is not exactly breadboard friendly since the reset button must be pressed to upload and it’s below the circuit board when attached to a breadboard. The reset isn’t brought out to a pin so its a little awkward to program. I needed 4 m-f and one m-m dupont jumpers to wire to the FTDI Basic board.
GDW –
Works like expected. I used the ESP32 demo software that gets installed in the IDE when you add ESP32 board support, which worked great. I also tried a variety of code from the randomtutorial website with no problems. Don’t forget to gently pull the clip down and out to open the camera connecter, not up, it can break, you only need a tiny bit of force. Nice to support a Canadian company too.
John Doe –
I installed Tasmota esp32 webcam on it, and it’s basically functional. When a typical webcam in the same lighting condition gives decent image, this camera’s image is just too dark.
James Zahary –
Terrific Device! Plenty of software at github to program this for facial recognition, or make a movie camera!
Greg in Kanata –
If Dr. Evil wouldn’t mind having a hobby type henchman, then these little things would make a great way to turn something off. Yup. Sorry kid. but Alexa turned off your internet because it is 4am…. Meanwhile it turns on the coffee and if that toaster would pop out another idea then this would be the way to go.
Bruce –
Quite happy with it! I’ve got a few places i can use these, so i may have to order more.
Nathan Mullin –
Works no issue for me, programming can be a bit tricky as you need to hold GPIO0 to ground and press reset when uploading starts. Also note most FTDI boards will not supply enough amps to power this. I’ve powered the 5v rail with a 700ma supply and it powers it ok, 200ma does not seem to suffice. Keep in mind you will need an arduino, esp, or FTDI to program this. Seller does state this in description.