This example project explains the following: * Reading and writing NFC tag * Use Flash storage to store Javascript source code which can be executed when the board is turned on. * Downloading JavaScript program from url. Project demo: Writes and runs JS program from Flash storage by downloading from internet using URL from NFC tag. NFC tag must contain the following info: 1- Password 2- URL separated by: , Note: This project is based on Mbed JavaScript and hence cannot be compiled using MBed Compiler. Read Readme.md for information about compiling and running this project.
README.md@0:1cefa69131b8, 2018-08-19 (annotated)
- Committer:
- akhtar.syedzeeshan@gmail.com
- Date:
- Sun Aug 19 21:39:08 2018 +0500
- Revision:
- 0:1cefa69131b8
First commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 1 | # mbed-js-st-fw-nfc02a1-example |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 2 | Example project for using Flash storage to store JS code and NFC tag reading and writing. |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 3 | |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 4 | ## Description |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 5 | This example project explains the following: |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 6 | * Reading and writing NFC tag |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 7 | * Use Flash storage to store Javascript source code which can be executed when the board is turned on. |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 8 | * Downloading JavaScript program from url. |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 9 | |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 10 | ## To build: |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 11 | |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 12 | ``` |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 13 | git clone https://github.com/STMicroelectronics-CentralLabs/mbed-js-st-examples |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 14 | cd mbed-js-st-examples/mbed-js-st-fw-nfc02a1-example |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 15 | npm install |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 16 | gulp --target=NUCLEO_F429ZI |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 17 | ``` |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 18 | See build/out/NUCLEO_F429ZI/mbedos5.bin. |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 19 | |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 20 | ## Errors building: |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 21 | When you will try to build, you will receive errors building the project, it is because you have not defined a few parameters. Try the following tasks: |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 22 | ### * Configuration error |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 23 | |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 24 | Open build/jerryscript/targets/mbedos5/mbed_app.json and modify the file as follows: |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 25 | |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 26 | ``` |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 27 | { |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 28 | "config": { |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 29 | "network-interface": { |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 30 | "help": "options are ETHERNET,WIFI_ESP8266,WIFI_ODIN,MESH_LOWPAN_ND,MESH_THREAD", |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 31 | "value": "ETHERNET" |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 32 | }, |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 33 | "mesh_radio_type": { |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 34 | "help": "options are ATMEL, MCR20", |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 35 | "value": "ATMEL" |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 36 | }, |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 37 | "esp8266-tx": { |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 38 | "help": "Pin used as TX (connects to ESP8266 RX)", |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 39 | "value": "D1" |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 40 | }, |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 41 | "esp8266-rx": { |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 42 | "help": "Pin used as RX (connects to ESP8266 TX)", |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 43 | "value": "D0" |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 44 | }, |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 45 | "esp8266-debug": { |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 46 | "value": false |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 47 | }, |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 48 | "wifi-ssid": { |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 49 | "value": "\"SSID\"" |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 50 | }, |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 51 | "wifi-password": { |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 52 | "value": "\"Password\"" |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 53 | } |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 54 | }, |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 55 | "macros": ["MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES", |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 56 | "JERRY_JS_PARSER 1", "JSMBED_USE_RAW_SERIAL", "JSMBED_OVERRIDE_JERRY_PORT_CONSOLE"], |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 57 | "target_overrides": { |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 58 | "*": { |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 59 | "target.features_add": ["NANOSTACK", "LOWPAN_ROUTER"], |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 60 | "mbed-mesh-api.6lowpan-nd-channel-page": 0, |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 61 | "mbed-mesh-api.6lowpan-nd-channel": 12, |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 62 | "mbed-trace.enable": 0, |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 63 | "mbed-http.http-buffer-size": 2048, |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 64 | "platform.stdio-baud-rate": 115200, |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 65 | "platform.stdio-convert-newlines": true |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 66 | }, |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 67 | "NUCLEO_F429ZI": { |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 68 | "target.restrict_size": "0x80000" |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 69 | } |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 70 | } |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 71 | } |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 72 | |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 73 | ``` |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 74 | where target.restrict_size is the size reserved for binary, the rest of the space will be used for Flash storage. |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 75 | |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 76 | ### * Pin generation error |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 77 | For some boards e.g. NUCLEO_F429ZI, pin generation is failing in Jerryscript. For the time being, you can skip some pin expressions in configuration to build for most boards by following these steps: |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 78 | |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 79 | Open build/jerryscript/targets/mbedos5/tools/generate_pins.py |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 80 | |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 81 | Find this line: |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 82 | ``` |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 83 | pins[pin.name] = evaluator.eval(expr.strip()) |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 84 | ``` |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 85 | Put this line in try statement: |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 86 | ``` |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 87 | try: |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 88 | pins[pin.name] = evaluator.eval(expr.strip()) |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 89 | except: |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 90 | print("[Warning] Skipping pin name: " + expr.strip()) |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 91 | ``` |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 92 | |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 93 | ### * Easy-connect error |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 94 | If easy-connect fails, try updating mbed-os library. |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 95 | |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 96 | Open terminal (in Linux, Mac OS X) or command prompt (in Windows) and run the following commands: |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 97 | ``` |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 98 | cd build/jerryscript/targets/mbedos5/mbed-os |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 99 | mbed update ca661f9d28526ca8f874b05432493a489c9671ea |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 100 | ``` |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 101 | |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 102 | ### * Error initializing X-NUCLEO-NFC02A1 expansion board |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 103 | if you see this error on serial terminal: |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 104 | ``` |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 105 | Failed to init XNucleoNFC02A1 expansion board! |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 106 | Error:0x1 |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 107 | ``` |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 108 | |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 109 | You have to move the 'X_NUCLEO_NFC02A1' library from 'mbed-js-st-fw-nfc02a1-example/node_modules/mbed-js-st-x-nucleo-nfc02a1/NFC02A1/X_NUCLEO_NFC02A1' to 'mbed-js-st-fw-nfc02a1-example/build/jerryscript/targets/mbedos5/X_NUCLEO_NFC02A1' |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 110 | |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 111 | Remember to Move, not Copy. |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 112 | |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 113 | ## Serial port Testing |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 114 | Open any serial port terminal application of your choice using settings of 115200-8N1 and try the following functions: |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 115 | ```js |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 116 | // To load a js source code from HTTP url and save in Flash storage, type the following command and press Ctrl+R to run. |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 117 | load_http_program('http://mysite.com/source.js'); |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 118 | |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 119 | // To erase the Flash storage, type the following command and press Ctrl+R to run. |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 120 | erase_flash(); |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 121 | |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 122 | // To reboot device,, type the following command and press Ctrl+R to run. |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 123 | reboot(); |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 124 | ``` |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 125 | ## Writing to flash from terminal |
akhtar.syedzeeshan@gmail.com | 0:1cefa69131b8 | 126 | If you want to write a JS program to Flash storage offline. Open any serial port terminal application of your choice and write JS code as you like and then press Ctrl+F to flash the code. If you want to test the code only, press Ctrl+R. |