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.

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?

UserRevisionLine numberNew 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.