נורת LED (או מחשבים זה עסק מדליק)

כרמל: אבא, הבטחת שנעשה משחק

אבא: בטח נעשה משחק (מגרד בראש)

אבא: נעשה משחק ניחושים, המחשב יגריל מספר, ואת תנחשי, אם צדקת הוא ידליק נורה ירוקה, ואם טעיתי נורה אדומה.

כרמל: מגניב, אפשר לשחק ?

אבא: לא, קודם צריך לחשוב

חיבור והפעלה

נתחיל מלחבר את הלוח בעזרת כבל ה USB למחשב יקפוץ לכם חלון בצד שיראה שההתקן מותקן

אחר כך נקיש על מקש ה Windows ונקליד devices נבחר באפשרות: "הגדרות עבור Bluetooth והתקנים אחרים"

ובמסך ההגדרות של ההתקנים נחפש את USB-SERIAL CH340

בכדי לחפש את מספר היציאה הסיריאלית, במקרה שלנו COM3

מהעמוד הנ"ל: http://micropython.org/download#esp8266 , נוריד את הגירסא העדכנית של הקושחה:

http://micropython.org/resources/firmware/esp8266-20170612-v1.9.1.bin

עכשיו אנחנו מוכנים לקצת אקשן, הקישו על מקש Windows והקלידו cmd, ובחלון הפקודה שנתפח הקלידו את הפקודות הבאות בכדי לצרוב את הקושחה

C:\Users\Tali Fruchter>python -m esptool --port COM3 write_flash --flash_size=detect 0 Downloads\esp8266-20170612-v1.9.1.bin
esptool.py v2.0.1
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x0040
Compressed 598432 bytes to 390604...
Writing at 0x00028000... (45 %)

Wrote 598432 bytes (390604 compressed) at 0x00000000 in 37.1 seconds (effective 128.9 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting...

C:\Users\Tali Fruchter>

ועכשיו לדבר האמיתי

C:\Users\Tali Fruchter> python -m mp.mpfshell

** Micropython File Shell v0.8.0, [email protected] **
-- Running on Python 3.6 using PySerial 3.4 --

mpfs [/]> open COM3
Connected to esp8266
mpfs [/]> repl
>
*** Exit REPL with Ctrl+Q ***

MicroPython v1.9.1-194-ga3cd349e on 2017-07-30; ESP module with ESP8266
Type "help()" for more information.
>>>

עכשיו אנחנו מחוברים ל python REPL (Read–eval–print loop), שמאפשר לנו להקליד פקודות באופן דינמי. בואו ננסה להדגים כמה דברים בסיסים לוודא שהלוח עובד

>>> import micropython

# מידע לגבי הזיכרון, בהמשך נגלה שזה מידע מאוד משמעותי לנו, שהזיכרון בלוח הזה הוא משאב יקר
>>> micropython.mem_info()
stack: 2112 out of 8192
GC: total: 35968, used: 21792, free: 14176
 No. of 1-blocks: 258, 2-blocks: 61, max blk sz: 264, max free sz: 206

# מידע על הפלטורמה, בעזרה זה נוכל להבדיל בין לוחות שונים, ובהמשך גם לבדוק את הקוד על ה פ PC 
>>> import sys
>>> print(sys.platform)
esp8266

בכדי לצאת מה REPL, יש להקיש על Ctrl+Q, ובכך נחזור לשורת הפקודה של Micropython File Shell

כיבוי והדלקה של נורת ה-LED

כעת ננסה להדליק את נורת הלד שנמצאת על הלוח (ליד אנטנת ה wifi),

בלוח יש הרבה חיבורים הנקראים General-purpose input/output (GPIO), ומעתה נקרא להם פשוט פינים.

הנה מפה של כל החיבורים בלוח ומה מחובר אליהם והמספרים שלהם, בעזרת המספרים נוכל לתפעל כל פין בנפרד:

נורת על הלד מחוברת ל GPIO2, ומשום מה מחוברת הפוך, לכן נאתחל אות הפין עם ערך 1, ונגדיר שאני משתמשים בפין לפלט:

>>> import machine
>>> pin = machine.Pin(2, machine.Pin.OUT, value=1)
# * קול תופים *
>>> pin.off()
# ויהי אור
>>> pin.on()
# וחושך על פני תהום
>>> pin.value(0)
# ושוב אור, ונראה שהבנתם את הרעיון

קבלת קלט מלחצן

כעת נראה כיצד אנחנו יכול לקבל קלט מ GPIO בעזרת הלחצן FLASH הממופה לפין 0

ערך של 1, מציין שהלחצן משוחרר, ואילו ערך של 0 מציין שהוא לחוץ

>>> from machine import Pin
>>> import time

>>> while True:
    print(Pin(0, Pin.IN).value())
    time.sleep(0.5)

1
1
1

# עכשיו לחץ על הכפתור

0
0
0

# נראה שגם הכתפור הזה מחובר הפוך...

העתקת קבצים ללוח

עכשיו שיש לנו מושג בסיסי איך לתפעל את הקלט ואת הפלט, עכשיו נאכיל את הלוח בסט הוראות מורכב יותר שנשמור לזיכרון ההבזק (פעם אחרונה שאני משתמש במילה הזאת, מבטיח...) של הלוח.

בעזרת notepad++, ניצור קובץ ששמו "main.py" שיכיל את התוכנית הבאה:

from machine import Pin
import time

def callback(pp):
    if pp.value():
        print("Button Released")
    else:
        print("Button Pressed")

button = Pin(0, Pin.IN, Pin.PULL_UP)
button.irq(callback)
# תחילה נעבור לתיקייה שבה שמרנו את main.py
C:\Users\Tali Fruchter> cd micropython
C:\Users\Tali Fruchter\micropython> python -m mp.mpfshell

** Micropython File Shell v0.8.0, [email protected] **
-- Running on Python 3.6 using PySerial 3.4 --

mpfs [/]> open COM3
Connected to esp8266
mpfs [/]> put main.py
mpfs [/]> repl

*** Exit REPL with Ctrl+Q ***

MicroPython v1.9.1-8-g7213e78d on 2017-06-12; ESP module with ESP8266
Type "help()" for more information.
>>>

# לחיצה על Ctrl+D תאתחל את הלוח (ניתן גם ללחוץ על לחצן ה RST)

# ועכשיו ניסוי כלים, נסו ללחוץ על מקש ה FLASH

Button Pressed
Button Released

# ועוד כמה פעמים

Button Pressed
Button Released
Button Pressed
Button Released
Button Pressed
Button Released
Button Pressed
Button Released
Button Pressed
Button Released

# וחאלס...

עכשיו נחבר בין כל מה שלמדנו עד עכשיו. שוב נשמור את הקוד הבא בקובץ "main.py" ונעתיק אותו ללוח

from machine import Pin
import time

led = Pin(2, Pin.OUT, value=1)

def callback(p):
    if p.value():
        led.on()
    else:
        led.off()

button = Pin(0, Pin.IN, Pin.PULL_UP)
button.irq(callback)

ולמתקדמים, לחצן שמשנה\שומר מצב. שימו לב לדרך שבה אנחנו משנים את המצב של הפין led מ-0 ל-1 על ידי האופרטור הלוגי not

from machine import Pin
import time

led = Pin(2, Pin.OUT, value=1)

def callback(p):
    if not p.value():
        led.value(not led.value())

button = Pin(0, Pin.IN, Pin.PULL_UP)
button.irq(callback)

המשחק

ועכשיו ללא עיכובים נוספים, המשחק המדהים שלנו במלוא תפארתו

from machine import Pin
import time
import os
import sys

led = Pin(2, Pin.OUT, value=1)

# mircopython מעט מוגבל בספריות ולכן טיפה טריקי להגריל מספר
# אנו מגרילים מספר בין 1 ל 3
num = int.from_bytes(os.urandom(8), sys.byteorder) % 3

# זה המשתנה שבו נשמור את הניחוש שלנו
guess = 0

def callback(p):
    # בכל לחיצה נקדם את הניחוש באחד (שימו לב ל global)
    global guess
    if not p.value():
        guess += 1

button = Pin(0, Pin.IN, Pin.PULL_UP)
button.irq(callback)

# ניתן לשחקן עשר שניות לתת את הניחוש
time.sleep(10)

print("board picked=%s, you choosed=%s" % (num, guess))
if num == guess:
    # אם הוא ניחש נכון, נדליק לכבודו את נורת הלד
    led.off()

# לשחק שוב, נאפס את הלוח בעזרת הכפתור RST, או על ידי Ctrl-D כאשר נמצאים ב REPL

תרגיל למתקדמים, לשנות את חוקי המשחק ולעשות אותו קשה יותר

זה החזיק את כרמל לבערך 2 דקות, צריך לנסות לשלוף שפן יותר רציני מזה

או לפחות משהו יותר ציבעוני...

  • [ ] לסדר את ההזחה של ההערות במשחק

results matching ""

    No results matching ""