Ovdje možete pročitati članke o elektroničkim platformama koje se koriste u edukaciji.

Za lakšu navigaciju koristite se kategorijama ili tražilicom.

Download: world_cup_get_result.py

Preuzimanje: world_cup_get_result.py Rezultat finala uživo na micro:bitu (prvi dio)

Prvo što sam trebao napraviti, pronaći je izvor podataka. Ranije sam za neka osobna istraživanja koristio odlični API worldcup.sfg.io. Problem u ovom našem slučaju je da taj API vraća dosta podataka, što nikako nije dobro za malu memorije micro:bita. Bezuspješno sam pokušao pronaći neki lakši API. Na kraju sam se odlučio malo upoznati s Pythonovim Flaskom i za doslovno pet minuta složio svoj vlastiti server koji se spajao na gornji API i izdvajao mi i slao samo rezultat. Ispod se vidi dobiveno, a na kraju članka priložen je kod servera. Za vrijeme izrade spajao sam se na worldcup.sfg.io/matches/today, a za potrebe ovog članka prilagodio sam spajanje na aktivni worldcup.sfg.io/matches.

Rezultat finala uživo na micro:bitu (prvi dio)

Nakon što sam dobio izvor podataka, odlučio sam testirati vezu ESP-a prema serveru. To je najbolje učiniti pomoću računala. Povežem se s ESP-om pomoću FTDI-ja i putem serijske veze izravno unosim AT naredbe.

Rezultat finala uživo na micro:bitu (prvi dio)

Testiranje sam uspješno odradio u Arduino IDE-ju. Ovo su potrebne naredbe, a ispod se vidi rezultat izvođenja.

AT+CIPSTART="TCP","192.168.5.40",5000
AT+CIPSEND=38
GET / HTTP/1.1
Host: 192.168.5.40
Rezultat finala uživo na micro:bitu (prvi dio)

Preostalo mi je navedene naredbe pretočiti u program za micro:bit. Kod je dosta jednostavan. Serijskom vezom povežem micro:bit i ESP8266, pošaljem ranije navedene AT naredbe i pripadajuće podatke i pročitam ono što mi je vraćeno, obradim i prikažem.

from microbit import *

uart.init(baudrate=115200, tx=pin0, rx=pin1)
sleep(3000)

while True:
    if button_a.was_pressed():
        display.clear()
        display.show('C')
        uart.write(b'ATE0\r\n')
        sleep(3000)
        uart.write(b'AT+CIPSTART="TCP","192.168.5.40",5000\r\n')
        sleep(3000)
        uart.write(b'AT+CIPSEND=38\r\n')
        sleep(3000)
        uart.write(b'GET / HTTP/1.1\r\nHost: 192.168.5.40\r\n\r\n')
        while True:
            step = 0
            while not uart.any():
                sleep(100)
                step += 1
                if step == 100:
                    break
            if step == 100:
                break
            while uart.any():
                data = uart.read()
        display.scroll(str(data), delay=50)
    sleep(100)

Nažalost, čitanje nije prošlo kako je zamišljeno. Podaci su uredno poslani i dobri podaci su vraćeni, no nikako nisam uspio natjerati micro:bit da pročita sve podatke. Jednom sam, pomoću ovog koda, uspio dobiti sve podatke, no u većini slučajeva dobio bih samo dio podataka, otprilike polovicu. Budući da je rezultat tek na kraju, kao takvi su beskorisni. Isprobao sam razne oblike dohvata, i u MakeCodu i u MicroPythonu, no bezuspješno. UART dio micro:bita problematičan je i loše dokumentiran. Nažalost, za proučavanje koda izvedbe nemam baš vremena.

Budući da glavna ekipa micro:bita dolazi iz Engleske, nema smisla odmah im se obratiti s pitanjima. :) Pustit ću da im rane malo zarastu. A tada možda probam istu stvar napraviti i pomoću Arduino IDE-ja. Sve to skupa ostavim za drugi dio ove priče o nogometu.