<?xml version="1.0" encoding="UTF-8"?>        <rss version="2.0"
             xmlns:atom="http://www.w3.org/2005/Atom"
             xmlns:dc="http://purl.org/dc/elements/1.1/"
             xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
             xmlns:admin="http://webns.net/mvcb/"
             xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
             xmlns:content="http://purl.org/rss/1.0/modules/content/">
        <channel>
            <title>
									DroneBot Workshop Forums - Recent Topics				            </title>
            <link>https://forum.dronebotworkshop.com/</link>
            <description>Discussion board for Robotics, Arduino, Raspberry Pi and other DIY electronics and modules. Join us today!</description>
            <language>en-US</language>
            <lastBuildDate>Sun, 07 Jun 2026 08:35:10 +0000</lastBuildDate>
            <generator>wpForo</generator>
            <ttl>60</ttl>
							                    <item>
                        <title>esp32cam</title>
                        <link>https://forum.dronebotworkshop.com/user-robot-projects/esp32cam/</link>
                        <pubDate>Wed, 03 Jun 2026 00:52:09 +0000</pubDate>
                        <description><![CDATA[i have esp32 cam thats working. I like to use the workshop code is it posible to have the  servo code with the motor code add together to controll the playstaion 3 controller and also contro...]]></description>
                        <content:encoded><![CDATA[<p>i have esp32 cam thats working. I like to use the workshop code is it posible to have the  servo code with the motor code add together to controll the playstaion 3 controller and also controller the wheels. How can i add the codes together?</p>
<p>The truck has one motor to control the wheels and one servo to control steering.</p>
<p>any help please </p>]]></content:encoded>
						                            <category domain="https://forum.dronebotworkshop.com/"></category>                        <dc:creator>videogame95</dc:creator>
                        <guid isPermaLink="true">https://forum.dronebotworkshop.com/user-robot-projects/esp32cam/</guid>
                    </item>
				                    <item>
                        <title>I am Barsha</title>
                        <link>https://forum.dronebotworkshop.com/introductions/i-am-barsha/</link>
                        <pubDate>Mon, 01 Jun 2026 06:55:16 +0000</pubDate>
                        <description><![CDATA[Hello,
I am Barsha. An electrical and electronics engineer and tech blogger.]]></description>
                        <content:encoded><![CDATA[<p>Hello,</p>
<p>I am Barsha. An electrical and electronics engineer and tech blogger. </p>]]></content:encoded>
						                            <category domain="https://forum.dronebotworkshop.com/"></category>                        <dc:creator>girlindrone</dc:creator>
                        <guid isPermaLink="true">https://forum.dronebotworkshop.com/introductions/i-am-barsha/</guid>
                    </item>
				                    <item>
                        <title>Low Power Mode with Sensors</title>
                        <link>https://forum.dronebotworkshop.com/2026-videos/low-power-mode-with-sensors/</link>
                        <pubDate>Sat, 30 May 2026 21:36:05 +0000</pubDate>
                        <description><![CDATA[In the recent video about low power modes with ESP32, I understand how to conserve power on the processor using the various sleep modes. But what if you have peripherals?  For example, if I ...]]></description>
                        <content:encoded><![CDATA[<p>In the recent video about low power modes with ESP32, I understand how to conserve power on the processor using the various sleep modes. But what if you have peripherals?  For example, if I have a BME280 taking temperature, humidity, and barometric pressure readings, how do I turn off the sensor so it won't take power while the processor is sleeping?</p>]]></content:encoded>
						                            <category domain="https://forum.dronebotworkshop.com/"></category>                        <dc:creator>MarkVanHorne</dc:creator>
                        <guid isPermaLink="true">https://forum.dronebotworkshop.com/2026-videos/low-power-mode-with-sensors/</guid>
                    </item>
				                    <item>
                        <title>ESP32-S3-ETH working in Home Assistant and with YAML</title>
                        <link>https://forum.dronebotworkshop.com/project-help/esp32-s3-eth-working-in-home-assistant-and-with-yaml/</link>
                        <pubDate>Wed, 27 May 2026 13:43:25 +0000</pubDate>
                        <description><![CDATA[I have watched Bill&#039;s video regarding the ESP32-S3-ETH, but I am wanting to power my little projects and send the data down the ethernet rather than WiFi. I am also wanting to know if yaml c...]]></description>
                        <content:encoded><![CDATA[<p>I have watched Bill's video regarding the ESP32-S3-ETH, but I am wanting to power my little projects and send the data down the ethernet rather than WiFi. I am also wanting to know if yaml can be used to control and set up the devices.</p>]]></content:encoded>
						                            <category domain="https://forum.dronebotworkshop.com/"></category>                        <dc:creator>MikeTMechanic</dc:creator>
                        <guid isPermaLink="true">https://forum.dronebotworkshop.com/project-help/esp32-s3-eth-working-in-home-assistant-and-with-yaml/</guid>
                    </item>
				                    <item>
                        <title>Michael here from Burnley, England in the UK</title>
                        <link>https://forum.dronebotworkshop.com/introductions/michael-here-from-burnley-england-in-the-uk/</link>
                        <pubDate>Wed, 27 May 2026 09:23:59 +0000</pubDate>
                        <description><![CDATA[As my title suggests I am Michael, currently living in Burnley, Lancashire, England and work as a Mechanical Design Engineer. I am very much in to the home assistant group and am learning as...]]></description>
                        <content:encoded><![CDATA[<p>As my title suggests I am Michael, currently living in Burnley, Lancashire, England and work as a Mechanical Design Engineer. I am very much in to the home assistant group and am learning as I go along. I have many ideas but often no way of making them a reality , hence why I have joined the forum.</p>]]></content:encoded>
						                            <category domain="https://forum.dronebotworkshop.com/"></category>                        <dc:creator>MikeTMechanic</dc:creator>
                        <guid isPermaLink="true">https://forum.dronebotworkshop.com/introductions/michael-here-from-burnley-england-in-the-uk/</guid>
                    </item>
				                    <item>
                        <title>Hello from Georgia!</title>
                        <link>https://forum.dronebotworkshop.com/introductions/hello-from-georgia/</link>
                        <pubDate>Mon, 25 May 2026 22:39:42 +0000</pubDate>
                        <description><![CDATA[I&#039;m Don, live in SW GA. I retired completely a year ago, and have been dabbling in electronics and embedded systems for about 4 or 5 years now. In my last jobs I was a high school and colleg...]]></description>
                        <content:encoded><![CDATA[<p>I'm Don, live in SW GA. I retired completely a year ago, and have been dabbling in electronics and embedded systems for about 4 or 5 years now. In my last jobs I was a high school and college math teacher. So I am likely good on the math needed for anything I will want to create using programming, microcontrollers and electronics in general, but light on the hands-on experiences. My longer term goal is to be able to help my grandkids with electronic projects and learning about making things, maybe a robot or a drone, if they are interested in those things. Maybe I can influence their interests in those areas. My oldest grandchild is 7, so I have another 3 or 4 years to get some proficiency myself so I can help them!</p>
<p>I have in the past enjoyed to dronbot videos and I like to read the Q&amp;A sections, where I usually learn even more.</p>
<p>I look forward to spending time exchanging ideas and experiences in the forums!</p>]]></content:encoded>
						                            <category domain="https://forum.dronebotworkshop.com/"></category>                        <dc:creator>DonVano</dc:creator>
                        <guid isPermaLink="true">https://forum.dronebotworkshop.com/introductions/hello-from-georgia/</guid>
                    </item>
				                    <item>
                        <title>Wire Claw</title>
                        <link>https://forum.dronebotworkshop.com/arduino/wire-claw/</link>
                        <pubDate>Mon, 25 May 2026 15:02:28 +0000</pubDate>
                        <description><![CDATA[I am trying to run the published Wire Claw project on a ESP32-C6. 
After installing the WireClaw firmware successfully on the ESP32-C6 and configuring WireClaw I can now read chip temp unde...]]></description>
                        <content:encoded><![CDATA[<p>I am trying to run the published Wire Claw project on a ESP32-C6. </p>
<p>After installing the WireClaw firmware successfully on the ESP32-C6 and configuring WireClaw I can now read chip temp under Devices.</p>
<p>But after writing this command in Telegram; what is the chip temperature?  I keep on getting this Error.</p>
<p>      "error: LLM call failed]”</p>
<p>I have configured: Telegram Bot Token, Chat ID &amp; API Key correctly, according to the instructions.</p>
<p>I have spent several days with this problem and I find this to be a very useful and interesting project.</p>
<p>My question is;  Do you have any magic tips How to solve this error? </p>
<p>Greatful for any tips or hints.</p>
<p>Best regards,</p>
<p>@bomtech</p>]]></content:encoded>
						                            <category domain="https://forum.dronebotworkshop.com/"></category>                        <dc:creator>bomtech</dc:creator>
                        <guid isPermaLink="true">https://forum.dronebotworkshop.com/arduino/wire-claw/</guid>
                    </item>
				                    <item>
                        <title>Visually controlled robot progress.</title>
                        <link>https://forum.dronebotworkshop.com/user-robot-projects/visually-controlled-robot-progress/</link>
                        <pubDate>Mon, 25 May 2026 09:30:39 +0000</pubDate>
                        <description><![CDATA[@byron @lee-g@tfmccarthy
or anyone else that might like to comment or give suggestions...
Today I decided to use AnyDesk to be able to program and send commands from my desktop laptop to t...]]></description>
                        <content:encoded><![CDATA[<p>@byron <br />@lee-g<br />@tfmccarthy</p>
<p>or anyone else that might like to comment or give suggestions...</p>
<p>Today I decided to use AnyDesk to be able to program and send commands from my desktop laptop to the robot laptop. So now I can sit in my office/bedroom and drive it around the house like I have seen on many utube robots. I think it is possible to do the same between a Windows PC and the Linux RPi should I ever get the time to do a Rpi version. However manual control is not the goal. I am interested in autonomous control of the motors and reading the sensors in order to carry out some spoken command.</p>
10819
<p>&nbsp;</p>
<p>My visually controlled robot was coded using FreeBASIC code but to perhaps be more interesting to others I decided I had better write a Python version. Things have moved on since I first joined the forum and I know Python a bit better and AI makes learning and using it easier.<br /><br />Although I am not just using the original target detection code in the project I decided to use AI to help write a Python version of my said target FreeBASIC code. The Python version wasn't all that good until I told it to write an exact copy of my algorithm although it had to use OpenCV so it wasn't a perfect copy.</p>
<p>At least anyone with Python installed and a camera can run it.</p>
<p>This is an output (laptop camera used) of the FreeBASIC version.</p>
<p>&nbsp;</p>
10821
<p>&nbsp;</p>
<p>This is an output (laptop camera used) of the Python version.</p>
<p>For some reason it used yellow dots on the centroids of each found blob. I had done likewise on the target blobs so maybe I gave it a different FB version to translate.</p>
10822
<p>Here is the Python code.</p>
<pre contenteditable="false">import cv2
import numpy as np
from dataclasses import dataclass
import random

# ============================================================
# CONFIGURATION
# ============================================================

IMGW = 640 #1100
IMGH = 360 #600

CAMERA_INDEX = 0

MIN_BLOB_AREA = 10
TARGET_DISTANCE = 5

SHOW_BINARY = False
SHOW_LABELS = False

# ============================================================
# BLOB STRUCTURE
# ============================================================

@dataclass
class Blob:
    area: int
    xMin: int
    yMin: int
    xMax: int
    yMax: int
    xCentroid: int
    yCentroid: int

# ============================================================
# FAST LOCAL THRESHOLD
# ============================================================

def fast_local_threshold(gray):
    """
    Faster replacement for the original pixel-loop threshold.

    Uses OpenCV adaptive threshold internally.
    Much faster than manual nested loops.
    """

    binary = cv2.adaptiveThreshold(
        gray,
        255,
        cv2.ADAPTIVE_THRESH_MEAN_C,
        cv2.THRESH_BINARY_INV,
        7,      # neighborhood size
        7       # threshold offset
    )

    return binary


# ============================================================
# CAMERA
# ============================================================

cap = cv2.VideoCapture(CAMERA_INDEX)

cap.set(cv2.CAP_PROP_FRAME_WIDTH, IMGW)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, IMGH)

if not cap.isOpened():
    print("ERROR: Could not open camera.")
    exit()

print("ESC = quit")
print("B   = toggle binary view")
print("L   = toggle label view")

# ============================================================
# MAIN LOOP
# ============================================================

while True:

    ret, frame = cap.read()

    if not ret:
        break

    frame = cv2.resize(frame, (IMGW, IMGH))

    # ========================================================
    # GRAYSCALE
    # ========================================================

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # ========================================================
    # FAST THRESHOLD
    # ========================================================

    binary = fast_local_threshold(gray)

    # Optional cleanup
    binary = cv2.medianBlur(binary, 3)

    # ========================================================
    # CONNECTED COMPONENTS
    # ========================================================

    num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(
        binary,
        connectivity=8
    )

    blobs = []

    # stats columns:
    # 

    for label in range(1, num_labels):

        x = stats
        y = stats
        w = stats
        h = stats
        area = stats

        if area &lt; MIN_BLOB_AREA:
            continue

        cx = int(centroids)
        cy = int(centroids)

        blob = Blob(
            area=area,
            xMin=x,
            yMin=y,
            xMax=x + w,
            yMax=y + h,
            xCentroid=cx,
            yCentroid=cy
        )

        blobs.append(blob)

    # ========================================================
    # FIND CLOSEST CENTROIDS
    # ========================================================

    hit1 = None
    hit2 = None

    min_distance = 999999.0

    blob_count = len(blobs)

    for i in range(blob_count):

        b1 = blobs

        for j in range(i + 1, blob_count):

            b2 = blobs

            dx = b2.xCentroid - b1.xCentroid
            dy = b2.yCentroid - b1.yCentroid

            dist = np.hypot(dx, dy)

            if dist &lt; min_distance:
                min_distance = dist
                hit1 = b1
                hit2 = b2

    # ========================================================
    # DISPLAY
    # ========================================================

    display = frame.copy()

    # Draw all blobs (optional)
    for blob in blobs:

        cv2.circle(
            display,
            (blob.xCentroid, blob.yCentroid),
            2,
            (0, 255, 255),
            -1
        )

    # ========================================================
    # TARGET DETECTION
    # ========================================================

    if hit1 is not None and hit2 is not None:

        dx = hit2.xCentroid - hit1.xCentroid
        dy = hit2.yCentroid - hit1.yCentroid

        distance = np.hypot(dx, dy)

        # Draw line between nearest blobs
        cv2.line(
            display,
            (hit1.xCentroid, hit1.yCentroid),
            (hit2.xCentroid, hit2.yCentroid),
            (0, 255, 255),
            1
        )

        if distance &lt; TARGET_DISTANCE:

            # Draw target rectangle
            cv2.rectangle(
                display,
                (hit1.xMin, hit1.yMin),
                (hit1.xMax, hit1.yMax),
                (0, 128, 255),
                2
            )

            cv2.rectangle(
                display,
                (hit1.xMin - 2, hit1.yMin - 2),
                (hit1.xMax + 2, hit1.yMax + 2),
                (0, 0, 255),
                1
            )

            size_text = f"{hit1.xMax-hit1.xMin}, {hit1.yMax-hit1.yMin}"

            cv2.putText(
                display,
                size_text,
                (hit1.xMax + 5, hit1.yMax),
                cv2.FONT_HERSHEY_SIMPLEX,
                0.5,
                (0, 255, 255),
                1
            )

            cv2.putText(
                display,
                "TARGET",
                (30, 40),
                cv2.FONT_HERSHEY_SIMPLEX,
                1,
                (0, 255, 0),
                2
            )

        else:

            cv2.putText(
                display,
                "NO TARGET",
                (30, 40),
                cv2.FONT_HERSHEY_SIMPLEX,
                1,
                (0, 0, 255),
                2
            )

    # ========================================================
    # FPS DISPLAY
    # ========================================================

    fps = cap.get(cv2.CAP_PROP_FPS)

    cv2.putText(
        display,
        f"Blobs: {len(blobs)}",
        (30, 80),
        cv2.FONT_HERSHEY_SIMPLEX,
        0.7,
        (255, 255, 255),
        2
    )

    # ========================================================
    # SHOW WINDOWS
    # ========================================================

    cv2.imshow("OpenCV Connected Components Tracking", display)

    if SHOW_BINARY:
        cv2.imshow("Binary", binary)

    if SHOW_LABELS:
        color_labels = labels_to_color(labels)
        cv2.imshow("Labels", color_labels)

    # ========================================================
    # KEYBOARD
    # ========================================================

    key = cv2.waitKey(1) &amp; 0xFF

    if key == 27:
        break

    elif key == ord('b'):
        SHOW_BINARY = not SHOW_BINARY

    elif key == ord('l'):
        SHOW_LABELS = not SHOW_LABELS

# ============================================================
# CLEANUP
# ============================================================

cap.release()
cv2.destroyAllWindows()
</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
						                            <category domain="https://forum.dronebotworkshop.com/"></category>                        <dc:creator>robotBuilder</dc:creator>
                        <guid isPermaLink="true">https://forum.dronebotworkshop.com/user-robot-projects/visually-controlled-robot-progress/</guid>
                    </item>
				                    <item>
                        <title>Convert WiFi to cellular</title>
                        <link>https://forum.dronebotworkshop.com/esp32-esp8266/convert-wifi-to-cellular/</link>
                        <pubDate>Sat, 23 May 2026 04:33:18 +0000</pubDate>
                        <description><![CDATA[I have a squatter living in one of my vacant rental properties. I already have a solar-powered cellular camera installed, but the squatter now knows its location after previous sheriff visit...]]></description>
                        <content:encoded><![CDATA[<p dir="auto">I have a squatter living in one of my vacant rental properties. I already have a solar-powered cellular camera installed, but the squatter now knows its location after previous sheriff visits, so I’m looking for a more discreet, low-profile solution.</p>
<p dir="auto">An ESP32-based project seems ideal for this. I want to build a hidden motion-activated switch that can send alerts over cellular. Power isn’t a major concern since I can run it off solar — I’m planning to use a small <strong>5W 5V solar panel</strong>, <strong>TP4056 charger</strong>, and a <strong>2200mAh LiPo battery</strong>.</p>
<p dir="auto">My main question is: <strong>What’s the best way to add cellular connectivity to an ESP32?</strong></p>
<p dir="auto">I know the ESP32 has WiFi, but I need to transmit data over cellular (4G/LTE preferred).</p>]]></content:encoded>
						                            <category domain="https://forum.dronebotworkshop.com/"></category>                        <dc:creator>Clark77494</dc:creator>
                        <guid isPermaLink="true">https://forum.dronebotworkshop.com/esp32-esp8266/convert-wifi-to-cellular/</guid>
                    </item>
				                    <item>
                        <title>Microsoft CoPilot Billing Notice</title>
                        <link>https://forum.dronebotworkshop.com/ai/microsoft-copilot-billing-notice/</link>
                        <pubDate>Fri, 22 May 2026 11:51:45 +0000</pubDate>
                        <description><![CDATA[This popped up in Visual Studio yesterday:
Copilot is moving to usage-based billing on June 1. For the best experience and latest updates, install Visual Studio 2026 — or at minimum, update...]]></description>
                        <content:encoded><![CDATA[<p>This popped up in Visual Studio yesterday:</p>
<p><em>Copilot is moving to usage-based billing on June 1. For the best experience and latest updates, install Visual Studio 2026 — or at minimum, update to the latest version. Get VS 2026 Update VS 2022 Learn more</em></p>
<p><em><a href="https://github.blog/news-insights/company-news/github-copilot-is-moving-to-usage-based-billing/">GitHub Copilot is moving to usage-based billing - The GitHub Blog</a></em></p>
<p>For me, what was conspicuously missing from the blog was how this would affect me, someone who had the free version. I now have the feeling that I'm going to be repeatedly asked to subscribe to the service until I do.</p>
<p>Approximately 2 years ago Microsoft told me that I could have CoPilot for free and have it integrated into my Visual Studio IDE. I said OK. I didn't use it but tried to get used to its suggestions. Now I use it semi-regularly.</p>
<p>Now it sounds like they want me to pay for it.</p>
<p>Thank God I don't depend upon it.</p>]]></content:encoded>
						                            <category domain="https://forum.dronebotworkshop.com/"></category>                        <dc:creator>TFMcCarthy</dc:creator>
                        <guid isPermaLink="true">https://forum.dronebotworkshop.com/ai/microsoft-copilot-billing-notice/</guid>
                    </item>
							        </channel>
        </rss>
		