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.
Jenkinsfile
- Committer:
- mbed_official
- Date:
- 2018-10-10
- Revision:
- 80:5b1786cc3ca4
- Parent:
- 77:b74ac6641a3e
- Child:
- 98:ea4e2f0eadde
File content as of revision 80:5b1786cc3ca4:
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": ["internal"], "REALTEK_RTL8195AM": ["internal"], "K64F": ["esp8266-driver"], "NUCLEO_F429ZI": ["esp8266-driver"] ] // Map toolchains to compilers def toolchains = [ ARM: "armcc", GCC_ARM: "arm-none-eabi-gcc", IAR: "IAR-linux" ] // Supported RF shields def radioshields = [ "internal", "esp8266-driver" ] 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" // 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 new .") 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']) } } } }