TNG

YouTube Channel - TNG Robotics   Visit Our YouTube Channel

Teaser 1 - Robo Buddy's Robo-Boogie!


  Class 1.0 | Connect

Python programming is setting the standard for teaching and learning worldwide. In this course, we will teach you the newest Python coding for robots. Why is Micro-based Python is cool? MicroPython is an excellent choice for embedded robots and IoT development because it combines simplicity with power and fits in just 1MB of memory! There's nothing else quite like it. Let's get started.

Check out your HEXLINK.

This includes a WeMos, Dual Base, and Breardboard for circuit prototyping.

WeMos D1 Mini




Microcontroller: ESP8266EX, IoT, Wi-Fi Capable 802.11 b/g/n
Processor: Tensilica L106 32-bit RISC processor, clocked at 80/160 MHz
Micro-USB Port: Connect WeMos to your computer's USB.
Flash Memory: 4 MB
Operating Voltage: 3.3V
Supports: Arduino (C++), MicroPython, NodeMCU Lua

5V Pin (Two Functions):
V-OUT: 5V output pin when WeMos is connected to USB computer or other external power.
V-IN: Accepts external 5V input from a regulated power supply or battery. The onboard regulator will convert this into 3.3V for the ESP8266.

3.3V Pin:
Provides 3.3V power directly to the ESP8266.
Use this if you're supplying your own regulated 3.3V power source.

Note: Do not power both the 5V and 3.3V pins simultaneously.
Pin Mapping | C++ vs MicroPython
++ (Arduino IDE) uses the board labels such as (D4), since the Arduino IDE will map D4 to GPIO2.
MicroPython (uPyCraft IDE) uses original hardware GPIO numbers such as (2), mapping Pin(2) for D4.

For this course, we'll be using MicroPython's GPIO numbers labeled by the stickers on your pin headers.
Dual Base
Breadboard

Step 1) Download the Software:

 Arduino Lab for MicroPython IDE  [Download Page]
 uPyCraft IDE  [Download Page]

UPyCraft is needed to upload code by USB interface to your Hexlink.



  Class 1.1 | Blink LED


HEXLINK Circuit Diagram:

Pin.IN Configures the pin as an input.
Pin.OUT Configures the pin as an output.


from machine import Pin
from time import sleep

led = Pin(2, Pin.OUT)

while True:
  led.value(not led.value())
  sleep(1)
				

# LED BLINK EVERY 1-SECOND (Pin 2)
# We start by loading our MicroPython Modules	
			
from machine import Pin      # Import function 'Pin' from Module 'machine'
from time import sleep       # Import function 'sleep' from Module 'time'

led = Pin(2, Pin.OUT)        # Create 'led' variable to turn LED on/off
                             # Pin.OUT sets Pin 2 as an OUTPUT Pin

while True:                  # While the following statements are true, do
  led.value(not led.value()) # Turn the LED value on/off, using 'not' flip
  sleep(1)                   # 1-second delay
				


  Class 1.2 | Detect Light


HEXLINK Circuit Diagram:

Learn how to detect the light level in a room using a Photoresistor! These are sensors for detecting light based on a variable resistance. You can access them using your analog pin (A0) on the Wemos D1 Mini and its built-in ADC (Analog-to-Digital Converter) to read the light level.

Your WeMos D1 Mini's ADC reads values between the range of 0 to 1023, corresponding to 0V to 3.3V.


from machine import ADC
from time import sleep

photoresistor = ADC(0)

while True:
    light = photoresistor.read()
    print("Light Level:", light)
    sleep(0.5)
				

# READ PHOTORESISTOR ON ADC (Pin A0)
# This method loads only 2 required functions	
			
from machine import ADC     # From Module 'machine' import function 'ADC'
from time import sleep      # From Module 'time' import function 'sleep'

photoresistor = ADC(0)      # Initialize the ADC pin (A0 on WeMos)

while True:
    light = photoresistor.read()  # Read the analog value (0-1023)
    print("Light Level:", light)  # Print the light level to the console
    sleep(0.5)                          # Pause for 0.5 seconds
				


  Class 1.3 | Night Light


HEXLINK Circuit Diagram:

Turn your LED on/off based on the Photoresistor light level. Use our analog pin (A0) as a switch to toggle our LED.


from machine import ADC, Pin
from time import sleep

photoresistor = ADC(0)
led = Pin(2, Pin.OUT)
THRESHOLD = 300

while True:
    light = photoresistor.read()
    
    if light  < THRESHOLD:
        led.on()
    else:
        led.off()
    
    print("Light Level:", light)
    sleep(0.2)
				

# READ PHOTORESISTOR ON ADC (Pin A0)
# This method loads 3 required functions	
			
from machine import ADC, Pin     # Import from Module 'machine' functions 'ADC, Pin'
from time import sleep           # Import from Module 'time' function 'sleep'

photoresistor = ADC(0)           # Initialize ADC for the photoresistor (A0)
led = Pin(2, Pin.OUT)
                                 # Define the light level threshold
THRESHOLD = 300                  # Adjust based on your environment

while True:
    light = photoresistor.read() # Read light level from photoresistor (0-1023)
    
    if light < THRESHOLD:        # Check the light level and toggle LED
        led.on()                 # Turn LED on (dark environment)
    else:
        led.off()                # Turn LED off (bright environment)
    
    print("Light Level:", light) # Print the light level for debugging
    sleep(0.2)                   # Tiny delay to avoid rapid toggling
				


  Class 1.4 | Web Buttons


HEXLINK Circuit Diagram:

Turn your LED on/off based on the Web Buttons from a website the WeMos creates and connects to on your local Wi-Fi network. Toggle our LED by the web.

Update the following part in the code below with your Wi-Fi name & password. Replace 'Your-WIFI' with your Wi-Fi's name and 'Your-PASSWORD' with your Wi-Fi's password.

ssid = ' your-WIFI '
password = ' your-PASSWORD '


import network
from machine import Pin
import socket

led = Pin(2, Pin.OUT)

ssid = 'your-WIFI'
password = 'your-PASSWORD'
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
while not wlan.isconnected():
    pass
print('Connected to Wi-Fi, IP:', wlan.ifconfig()[0])

html = """
<!DOCTYPE html>
<html>
<head>
    <title>LED Control</title>
</head>
<body style='text-align:center;'>
    <h1>Toggle LED</h1>
    <form action="/on"><button>Turn ON</button></form>
    <form action="/off"><button>Turn OFF</button></form>
    <h4>Click twice if needed</h4>
</body>
</html>
"""

addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
server = socket.socket()
server.bind(addr)
server.listen(1)
print('Server running...')

while True:
    conn, addr = server.accept()
    request = conn.recv(1024).decode()
    if '/on' in request:
        led.on()
    elif '/off' in request:
        led.off()
    conn.send("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n" + html)
    conn.close()
				

# TURN LED ON/OFF BY WEBSITE BUTTONS
# Load Modules and Functions	

import network
from machine import Pin
import socket

# Initialize LED on GPIO2
led = Pin(2, Pin.OUT)

# Connect to Wi-Fi
ssid = 'your-WIFI'
password = 'your-PASSWORD'
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
while not wlan.isconnected():
    pass
print('Connected to Wi-Fi, IP:', wlan.ifconfig()[0])

# HTML page
html = """
<!DOCTYPE html>
<html>
<head>
    <title>LED Control</title>
</head>
<body style='text-align:center;'>
    <h1>Toggle LED</h1>
    <form action="/on"><button>Turn ON</button></form>
    <form action="/off"><button>Turn OFF</button></form>
    <h4>Click twice if needed</h4>
</body>
</html>
"""

# Start server
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
server = socket.socket()
server.bind(addr)
server.listen(1)
print('Server running...')

# Handle requests
while True:
    conn, addr = server.accept()
    request = conn.recv(1024).decode()
    if '/on' in request:
        led.on()
    elif '/off' in request:
        led.off()
    conn.send("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n" + html)
    conn.close()
				


Hey!

We think you are pretty cool.