A quick example of a simple WiFi application using the WiFi and network-socket APIs that is provided as a part of mbed-os.
The program brings up the WiFi and the underlying network interface, and uses it to scans available networks, connects to a network, prints interface and connection details and performs simple HTTP operation.
Supported hardware:
- UBLOX Odin board built-in WiFi module
- REALTEK_RTL8195AM built-in WiFi module
- NUCLEO_F401RE with X-NUCLEO-IDW01M1 WiFi expansion board using pins D8 D2
- NUCLEO_F429ZI with ESP8266-01 module using pins D1 D0
- NUCLEO_L476RG with ESP8266-01 module using pins D8 D2
- Other mbed targets with ESP8266 module or X-NUCLEO-IDW01M1 expansion board
Not that the mbed target board the WiFi shield gets connected to shouldn't have any other network interface e.g. Ethernet.
ESP8266 is a fallback option and will be used if the build is for unsupported platform.
Diff: Jenkinsfile
- Revision:
- 43:45429aa163a0
- Child:
- 46:9282f93cd1ce
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Jenkinsfile Tue Nov 21 08:15:03 2017 +0000 @@ -0,0 +1,100 @@ +properties ([[$class: 'ParametersDefinitionProperty', parameterDefinitions: [ + [$class: 'StringParameterDefinition', name: 'mbed_os_revision', defaultValue: '', description: 'Revision of mbed-os to build. Use format "pull/PR-NUMBER/head" to access mbed-os PR'] + ]]]) + +if (params.mbed_os_revision == '') { + echo 'Use mbed OS revision from mbed-os.lib' +} else { + echo "Use mbed OS revisiong ${params.mbed_os_revision}" + if (params.mbed_os_revision.matches('pull/\\d+/head')) { + echo "Revision is a Pull Request" + } +} + +// List of targets with supported RF shields to compile +def targets = [ + "UBLOX_EVK_ODIN_W2": ["builtin"], + "REALTEK_RTL8195AM": ["builtin"], + "K64F": ["WIFI_ESP8266"], + "NUCLEO_F401RE": ["WIFI_IDW01M1"], + "NUCLEO_F429ZI": ["WIFI_ESP8266"] + ] + +// Map toolchains to compilers +def toolchains = [ + ARM: "armcc", + GCC_ARM: "arm-none-eabi-gcc", + IAR: "IAR-linux" + ] + +// Supported RF shields +def radioshields = [ + "builtin", + "WIFI_IDW01M1", + "WIFI_ESP8266" + ] + +def stepsForParallel = [:] + +// Jenkins pipeline does not support map.each, we need to use oldschool for loop +for (int i = 0; i < targets.size(); i++) { + for(int j = 0; j < toolchains.size(); j++) { + for(int k = 0; k < radioshields.size(); k++) { + def target = targets.keySet().asList().get(i) + def allowed_shields = targets.get(target) + def toolchain = toolchains.keySet().asList().get(j) + def compilerLabel = toolchains.get(toolchain) + def radioshield = radioshields.get(k) + + def stepName = "${target} ${toolchain} ${radioshield}" + if(allowed_shields.contains(radioshield)) { + stepsForParallel[stepName] = buildStep(target, compilerLabel, toolchain, radioshield) + } + } + } +} + +timestamps { + parallel stepsForParallel +} + +def buildStep(target, compilerLabel, toolchain, radioShield) { + return { + stage ("${target}_${compilerLabel}_${radioShield}") { + node ("${compilerLabel}") { + deleteDir() + dir("mbed-os-example-wifi") { + checkout scm + def config_file = "mbed_app.json" + + if ("${radioShield}" != "internal") { + // Replace default rf shield + execute("sed -i 's/\"value\": \"internal\"/\"value\": \"${radioShield}\"/' ${config_file}") + } + + if ("${radioShield}" == "WIFI_IDW01M1") { + execute("rm .mbedignore") + } + + // Set mbed-os to revision received as parameter + execute ("mbed deploy --protocol ssh") + if (params.mbed_os_revision != '') { + dir ("mbed-os") { + if (params.mbed_os_revision.matches('pull/\\d+/head')) { + execute("git fetch origin ${params.mbed_os_revision}:PR") + execute("git checkout PR") + } else { + execute ("git checkout ${params.mbed_os_revision}") + } + } + } + + execute ("mbed compile --build out/${target}_${toolchain}_${radioShield}/ -m ${target} -t ${toolchain} -c --app-config ${config_file}") + } + stash name: "${target}_${toolchain}_${radioShield}", includes: '**/mbed-os-example-wifi.bin' + archive '**/mbed-os-example-wifi.bin' + step([$class: 'WsCleanup']) + } + } + } +}