NodeMCU Projects: Difference between revisions
Content added Content deleted
Line 75: | Line 75: | ||
== Projects == |
== Projects == |
||
===Playing with GPIO=== |
|||
<syntaxhighlight lang="python"> |
<syntaxhighlight lang="python"> |
||
Line 93: | Line 93: | ||
===Fading an LED=== |
|||
<syntaxhighlight lang="python"> |
<syntaxhighlight lang="python"> |
||
import time, math |
import time, math |
||
Line 110: | Line 110: | ||
=== Control a hobby servo === |
|||
Hobby servo motors can be controlled using PWM. |
Hobby servo motors can be controlled using PWM. |
||
They require a frequency of 50Hz and a duty between about 40 and 115, with 77 being the center value. |
They require a frequency of 50Hz and a duty between about 40 and 115, with 77 being the center value. |
||
*Manual Movements |
|||
<syntaxhighlight lang="python"> |
<syntaxhighlight lang="python"> |
||
servo = machine.PWM(machine.Pin(12), freq=50) |
servo = machine.PWM(machine.Pin(12), freq=50) |
||
Line 122: | Line 123: | ||
</syntaxhighlight> |
</syntaxhighlight> |
||
*Random movements: |
|||
<syntaxhighlight lang="python"> |
<syntaxhighlight lang="python"> |
||
servo = machine.PWM(machine.Pin(12), freq=50) |
servo = machine.PWM(machine.Pin(12), freq=50) |
||
Line 127: | Line 129: | ||
servo.duty(urandom.getrandbits(8)) |
servo.duty(urandom.getrandbits(8)) |
||
time.sleep(1) |
time.sleep(1) |
||
</syntaxhighlight> |
|||
* Analog Temperature Meter: |
|||
Requirements: |
|||
DS18B20 Temperature sensor |
|||
Servo Motor |
|||
Micropython based NodeMCU |
|||
Wiring details: |
|||
Servo motor = D4 => GPIO 2 |
|||
DS18B20 = D7 => GPIO 13 |
|||
<syntaxhighlight lang="python"> |
|||
import time |
|||
import machine |
|||
import onewire, ds18x20 |
|||
# the device is on GPIO13 |
|||
dat = machine.Pin(13) |
|||
# create the onewire object |
|||
ds = ds18x20.DS18X20(onewire.OneWire(dat)) |
|||
# scan for devices on the bus |
|||
roms = ds.scan() |
|||
print('found devices:', roms) |
|||
# servo is connected to GPIO2 |
|||
servo = machine.PWM(machine.Pin(2), freq=50) |
|||
# Function for mapping range |
|||
def translate(value, leftMin, leftMax, rightMin, rightMax): |
|||
# Figure out how 'wide' each range is |
|||
leftSpan = leftMax - leftMin |
|||
rightSpan = rightMax - rightMin |
|||
# Convert the left range into a 0-1 range (float) |
|||
valueScaled = float(value - leftMin) / float(leftSpan) |
|||
# Convert the 0-1 range into a value in the right range. |
|||
return rightMin + (valueScaled * rightSpan) |
|||
# print all temperatures |
|||
while True: |
|||
ds.convert_temp() |
|||
time.sleep_ms(1000) |
|||
for rom in roms: |
|||
print(ds.read_temp(rom)) |
|||
temp = ds.read_temp(rom) |
|||
srv = translate(temp, 20, 35, 40, 115) |
|||
print(int(srv)) |
|||
if (temp>=20) & (temp<=35): |
|||
servo.duty(int(srv)) |
|||
else: |
|||
print("Out of Range") |
|||
</syntaxhighlight> |
</syntaxhighlight> |
||
Revision as of 09:45, 30 November 2017
Micropython
Basics
- Installing:
sudo pip install esptool esptool.py --port /dev/ttyUSB0 erase_flash esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 ~/Desktop/esp8266-20171101-v1.9.3.bin
- Connecting via Terminal:
sudo apt install picocom picocom /dev/ttyUSB0 -b115200
- Connecting via REPL(web):
import webrepl_setup
If you disabled automatic start-up on boot, you may run configured daemon on demand using:
import webrepl webrepl.start()
- Checking filesystem:
import os os.listdir()
- Create directories:
os.mkdir('dir')
- Remove Files:
os.remove('data.txt')
- Writing Data to files:
f = open('data.txt', 'w') f.write('some data') f.close()
- Reading data:
f = open('data.txt') f.read() f.close()
- Checking Machine Frequency & Overclocking:
import machine machine.freq() # get the current frequency of the CPU machine.freq(160000000) # set the CPU frequency to 160 MHz
- Check AP Name:
import network; ap = network.WLAN(network.AP_IF); print(ap.config('essid'));
- Change AP name and password:
import network; ap = network.WLAN(network.AP_IF); ap.active(True); ap.config(essid='MyESP8266', authmode=network.AUTH_WPA_WPA2_PSK, password='mypassword'); print(ap.config('essid'));
- Boot Process:
As a final step of boot procedure, main.py is executed from filesystem This file is a hook to start up a user application each time on boot (instead of going to REPL). For small test applications, you may name them directly as main.py but instead it’s recommended to keep your application(s) in separate files, and have just the following in main.py:
import my_app my_app.main()
- Upload data using Serial Port
sudo pip install adafruit-ampy ampy --port /dev/ttyUSB0 put ~/Desktop/main.py
Projects
Playing with GPIO
import machine
import time
import urandom
pin = machine.Pin(2, machine.Pin.OUT)
def toggle(p):
p.value(not p.value())
while True:
time.sleep_ms(urandom.getrandbits(8))
toggle(pin)
Fading an LED
import time, math
import machine
led = machine.PWM(machine.Pin(2), freq=1000)
def pulse(l, t):
for i in range(20):
l.duty(int(math.sin(i / 10 * math.pi) * 500 + 500))
time.sleep_ms(t)
while True:
pulse(led, 20)
Control a hobby servo
Hobby servo motors can be controlled using PWM. They require a frequency of 50Hz and a duty between about 40 and 115, with 77 being the center value.
- Manual Movements
servo = machine.PWM(machine.Pin(12), freq=50)
servo.duty(40)
servo.duty(115)
servo.duty(77)
- Random movements:
servo = machine.PWM(machine.Pin(12), freq=50)
while True:
servo.duty(urandom.getrandbits(8))
time.sleep(1)
- Analog Temperature Meter:
Requirements:
DS18B20 Temperature sensor Servo Motor Micropython based NodeMCU
Wiring details:
Servo motor = D4 => GPIO 2 DS18B20 = D7 => GPIO 13
import time
import machine
import onewire, ds18x20
# the device is on GPIO13
dat = machine.Pin(13)
# create the onewire object
ds = ds18x20.DS18X20(onewire.OneWire(dat))
# scan for devices on the bus
roms = ds.scan()
print('found devices:', roms)
# servo is connected to GPIO2
servo = machine.PWM(machine.Pin(2), freq=50)
# Function for mapping range
def translate(value, leftMin, leftMax, rightMin, rightMax):
# Figure out how 'wide' each range is
leftSpan = leftMax - leftMin
rightSpan = rightMax - rightMin
# Convert the left range into a 0-1 range (float)
valueScaled = float(value - leftMin) / float(leftSpan)
# Convert the 0-1 range into a value in the right range.
return rightMin + (valueScaled * rightSpan)
# print all temperatures
while True:
ds.convert_temp()
time.sleep_ms(1000)
for rom in roms:
print(ds.read_temp(rom))
temp = ds.read_temp(rom)
srv = translate(temp, 20, 35, 40, 115)
print(int(srv))
if (temp>=20) & (temp<=35):
servo.duty(int(srv))
else:
print("Out of Range")
- References
{{#widget:DISQUS
|id=networkm
|uniqid=NodeMCU Projects
|url=https://aman.awiki.org/wiki/NodeMCU_Projects
}}