diff --git a/1-getting-started/lessons/4-connect-internet/README.md b/1-getting-started/lessons/4-connect-internet/README.md index bd43c2c3..ff1996c1 100644 --- a/1-getting-started/lessons/4-connect-internet/README.md +++ b/1-getting-started/lessons/4-connect-internet/README.md @@ -269,7 +269,7 @@ Write the server code. 1. Launch a new VS Code Terminal by selecting *Terminal -> New Terminal, or pressing `` CTRL+` ``. The new terminal will load the virtual environment, with the call to activate this appearing in the terminal. The name of the virtual environment (`.venv`) will also be in the prompt: ```output - ➜ nightlight source .venv/bin/activate + ➜ nightlight-server source .venv/bin/activate (.venv) ➜ nightlight ``` diff --git a/3-transport/lessons/1-location-tracking/code-gps-decode/pi/gps-sensor/app.py b/3-transport/lessons/1-location-tracking/code-gps-decode/pi/gps-sensor/app.py index a5de9192..098e1d84 100644 --- a/3-transport/lessons/1-location-tracking/code-gps-decode/pi/gps-sensor/app.py +++ b/3-transport/lessons/1-location-tracking/code-gps-decode/pi/gps-sensor/app.py @@ -22,10 +22,14 @@ def print_gps_data(line): print(f'{lat},{lon} - from {msg.num_sats} satellites') while True: - line = serial.readline().decode('utf-8') + try: + line = serial.readline().decode('utf-8') + + while len(line) > 0: + print_gps_data(line) + line = serial.readline().decode('utf-8') - while len(line) > 0: - print_gps_data(line) + except UnicodeDecodeError: line = serial.readline().decode('utf-8') time.sleep(1) diff --git a/3-transport/lessons/1-location-tracking/code-gps/pi/gps-sensor/app.py b/3-transport/lessons/1-location-tracking/code-gps/pi/gps-sensor/app.py index 0dfad1e9..11963a42 100644 --- a/3-transport/lessons/1-location-tracking/code-gps/pi/gps-sensor/app.py +++ b/3-transport/lessons/1-location-tracking/code-gps/pi/gps-sensor/app.py @@ -9,10 +9,14 @@ def print_gps_data(): print(line.rstrip()) while True: - line = serial.readline().decode('utf-8') + try: + line = serial.readline().decode('utf-8') + + while len(line) > 0: + print_gps_data() + line = serial.readline().decode('utf-8') - while len(line) > 0: - print_gps_data() + except UnicodeDecodeError: line = serial.readline().decode('utf-8') time.sleep(1) diff --git a/3-transport/lessons/1-location-tracking/pi-gps-sensor.md b/3-transport/lessons/1-location-tracking/pi-gps-sensor.md index 01148da1..8344dc19 100644 --- a/3-transport/lessons/1-location-tracking/pi-gps-sensor.md +++ b/3-transport/lessons/1-location-tracking/pi-gps-sensor.md @@ -149,13 +149,31 @@ Program the device. $BDGSV,1,1,00*68 ``` - > If you get one of the following errors when stopping and restarting your code, kill the VS Code terminal, then launch a new one and try again. + > If you get one of the following errors when stopping and restarting your code, add a `try - except` block to your while loop. ```output UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93 in position 0: invalid start byte UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf1 in position 0: invalid continuation byte ``` + ```python + while True: + try: + line = serial.readline().decode('utf-8') + + while len(line) > 0: + print_gps_data() + line = serial.readline().decode('utf-8') + + # There's a random chance the first byte being read is part way through a character. + # Read another full line and continue. + + except UnicodeDecodeError: + line = serial.readline().decode('utf-8') + + time.sleep(1) + ``` + > 💁 You can find this code in the [code-gps/pi](code-gps/pi) folder. 😀 Your GPS sensor program was a success! diff --git a/README.md b/README.md index a6484c9a..1f8f3a39 100644 --- a/README.md +++ b/README.md @@ -134,6 +134,7 @@ Our team produces other curricula! Check out: - [Web Dev for Beginners](https://aka.ms/webdev-beginners) - [ML for Beginners](https://aka.ms/ml-beginners) - [Data Science for Beginners](https://aka.ms/datascience-beginners) +- [AI for Beginners](https://aka.ms/ai-beginners) ## Image attributions diff --git a/package-lock.json b/package-lock.json index f9403080..c04239ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1518,9 +1518,9 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "node_modules/mkdirp": { @@ -3987,9 +3987,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "mkdirp": { diff --git a/quiz-app/package-lock.json b/quiz-app/package-lock.json index 48273b72..1e3ee3cf 100644 --- a/quiz-app/package-lock.json +++ b/quiz-app/package-lock.json @@ -2915,9 +2915,9 @@ } }, "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "dependencies": { "lodash": "^4.17.14" @@ -9055,9 +9055,9 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "node_modules/minipass": { @@ -17099,9 +17099,9 @@ "dev": true }, "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "requires": { "lodash": "^4.17.14" @@ -22005,9 +22005,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "minipass": { diff --git a/translations/README.tr.md b/translations/README.tr.md index 54bef696..e6e5c42e 100644 --- a/translations/README.tr.md +++ b/translations/README.tr.md @@ -11,6 +11,8 @@ [![Bengali](https://img.shields.io/badge/-Bengali-blue)](README.bn.md) [![English](https://img.shields.io/badge/-English-red)](../README.md) [![Chinese](https://img.shields.io/badge/-Chinese-yellow)](README.zh-cn.md) +[![French](https://img.shields.io/badge/-French-purple)](../translations/README.fr.md) +[![Japanese](https://img.shields.io/badge/-Japanese-red)](../translations/README.ja.md) # Yeni Başlayanlar için IOT