NodeMCU Projects: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 3: | Line 3: | ||
<br/> |
<br/> |
||
= Micropython = |
|||
= Analog Temperature Meter= |
|||
== 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=== |
|||
<syntaxhighlight lang="python"> |
|||
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) |
|||
</syntaxhighlight> |
|||
===Fading an LED=== |
|||
<syntaxhighlight lang="python"> |
|||
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) |
|||
</syntaxhighlight> |
|||
=== 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 |
|||
<syntaxhighlight lang="python"> |
|||
servo = machine.PWM(machine.Pin(12), freq=50) |
|||
servo.duty(40) |
|||
servo.duty(115) |
|||
servo.duty(77) |
|||
</syntaxhighlight> |
|||
*Random movements: |
|||
<syntaxhighlight lang="python"> |
|||
servo = machine.PWM(machine.Pin(12), freq=50) |
|||
while True: |
|||
servo.duty(urandom.getrandbits(8)) |
|||
time.sleep(1) |
|||
</syntaxhighlight> |
|||
* Analog Temperature Meter: |
|||
Requirements: |
Requirements: |
Revision as of 09:47, 30 November 2017
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
}}