{"id":20316067,"url":"https://github.com/lupyuen/send_altitude_cocoos","last_synced_at":"2025-04-11T17:40:35.687Z","repository":{"id":87767190,"uuid":"143746486","full_name":"lupyuen/send_altitude_cocoos","owner":"lupyuen","description":"IoT program for Arduino Uno / STM32 Blue Pill (libopencm3) that reads BME280 temperature + humidity + altitude sensors, via I2C or SPI with DMA and multitasking. Sends sensor data to Sigfox via Wisol Sigfox module on UART. Runs on cocoOS task scheduling library http://www.cocoos.net ","archived":false,"fork":false,"pushed_at":"2019-01-07T13:14:19.000Z","size":9348,"stargazers_count":25,"open_issues_count":0,"forks_count":6,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-03-25T13:39:43.985Z","etag":null,"topics":["arduino","bme280","cocoos","dma","iot","libopencm3","sigfox","spi","stm32","uart","wisol"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lupyuen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-08-06T15:16:39.000Z","updated_at":"2024-10-26T16:34:34.000Z","dependencies_parsed_at":null,"dependency_job_id":"34b7714b-6d45-42bb-afdd-a7fcb22f27ec","html_url":"https://github.com/lupyuen/send_altitude_cocoos","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lupyuen%2Fsend_altitude_cocoos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lupyuen%2Fsend_altitude_cocoos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lupyuen%2Fsend_altitude_cocoos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lupyuen%2Fsend_altitude_cocoos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lupyuen","download_url":"https://codeload.github.com/lupyuen/send_altitude_cocoos/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248451338,"owners_count":21105852,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arduino","bme280","cocoos","dma","iot","libopencm3","sigfox","spi","stm32","uart","wisol"],"created_at":"2024-11-14T18:24:04.607Z","updated_at":"2025-04-11T17:40:35.677Z","avatar_url":"https://github.com/lupyuen.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"IoT program for Arduino Uno and STM32 Blue Pill (with libopencm3) to read BME280 I2C temperature, humidity and altitude sensors and send the aggregated sensor data to the Sigfox IoT network (via the Wisol Sigfox module connected on UART).  Supports Sigfox downlink too. Multitasking of the sensors is handled by cocoOS, the portable task scheduling framework: http://www.cocoos.net\n\nRead the tutorials:\n\n- Part 1: _Juggling Arduino Sensors With cocoOS_\u003cbr\u003e\n    https://medium.com/coinmonks/juggling-arduino-sensors-with-cocoos-403e14ec28be\n\n- Part 2: _Juggling Sigfox Downlink And Arduino Sensors With cocoOS_\u003cbr\u003e\n    https://medium.com/coinmonks/juggling-sigfox-downlink-and-arduino-sensors-with-cocoos-4594be59bf1b\n\n- Part 3: _Juggling STM32 Blue Pill For Arduino Jugglers_\u003cbr\u003e\n    https://medium.com/@ly.lee/juggling-stm32-blue-pill-for-arduino-jugglers-edf6820dc808\n\n- Part 4: _Watch STM32 Blue Pill Juggle Two SPI Sensors With DMA_\u003cbr\u003e\n    https://medium.com/@ly.lee/watch-stm32-blue-pill-juggle-two-spi-sensors-with-dma-20cd1aa89869\n\n- Part 5: _Connect STM32 Blue Pill To Sigfox_ \u003cbr\u003e\n    https://medium.com/@ly.lee/connect-stm32-blue-pill-to-sigfox-28c6f91bddc1\n\nThe code compiles under the Arduino IDE, Arduino Web Editor, and Visual Studio Code with the PlatformIO extension installed. You'll need to install the following libraries:\n\n- `cocoOS_5.0.3`: Download from http://www.cocoos.net/download.html. \u003cbr\u003e\n    For Arduino IDE and Arduino Web Editor: \u003cbr\u003e\n    Unzip and move all files in inc and src to top level. \u003cbr\u003e\n    Replace os_defines.h by our custom cocoOS settings: \u003cbr\u003e\n    https://github.com/lupyuen/send_altitude_cocoos/blob/master/os_defines.h \u003cbr\u003e\n    Zip up and add to Arduino IDE or Arduino Web Editor as a library.\n\n- `BME280` (for Arduino IDE and Arduino Web Editor only): Download the `BME280` library by Tyler Glenn from Arduino Library Manager\n\nTested with Arduino Uno and STM32 Blue Pill.\n\nYou may use the code here for any purpose, including private and commercial use.  The code is licensed under the MIT Licence.\n\n-----\n## Select Features By Article\n\nEach tutorial article in the series is configured with a different set of features.\nTo allow new articles to be published without breaking the features of the older articles,\nwe configure the article that we wish to use in `platform.h`\n\nEdit `platform.h` and uncomment only ONE of these lines:\n\n```c++\n//  Configure the features according to the article.  Only one of these CONFIG_ARTICLEx should be defined.\n//  #define CONFIG_ARTICLE1  //  Uncomment to support Article #1: \n                             //  \"Juggling Arduino Sensors With cocoOS\" \n//  #define CONFIG_ARTICLE2  //  Uncomment to support Article #2: \n                             //  \"Juggling Sigfox Downlink And Arduino Sensors With cocoOS\" \n//  #define CONFIG_ARTICLE3  //  Uncomment to support Article #3: \n                             //  \"Juggling STM32 Blue Pill For Arduino Jugglers\"\n//  #define CONFIG_ARTICLE4  //  Uncomment to support Article #4: \n                             //  \"Watch STM32 Blue Pill Juggle Two SPI Sensors With DMA\"\n//  #define CONFIG_ARTICLE5  //  Uncomment to support Article #5: \n                             //  \"Connect STM32 Blue Pill To Sigfox\"\n//  (...plus future articles)\n```\n\n-----\n## Create Source File Links For PlatformIO\n\nTo compile the project under PlatformIO in Visual Studio Code, the source files\nshould be symbolically linked into the folder `src`\n\nOpen a Windows, Mac or Ubuntu command prompt and enter:\n\n```bash\ngit clone https://github.com/lupyuen/send_altitude_cocoos.git\ncd send_altitude_cocoos\n```\n\nDownload cocoOS_5.0.3 from http://www.cocoos.net/download.html\n\nCopy the cocoOS_5.0.3 source files (`inc/*.h, src/*.c`) into send_altitude_cocoos at this subfolder:\n\n`lib/cocoOS_5.0.3/src`\n\nThere should not be any folders inside `lib/cocoOS_5.0.3/src`\n\nThen enter the following into the command prompt…\n\n_For Windows:_\n\n```cmd\nscripts\\linksrc.cmd\n```\n\n_For Mac and Ubuntu:_\n\n```bash\nchmod +x scripts/*.sh\nscripts/linksrc.sh\n```\n\nTo allow Arduino IDE and PlatformIO to share the same cocoOS library `cocoOS_5.0.3`:\n\n```bash\nln -s ~/send_altitude_cocoos/lib/cocoOS_5.0.3/src/ ~/Documents/Arduino/libraries/cocoOS_5.0.3\n```\n\nArduino IDE does not compile if `send_altitude_cocoos/src` contains any files. Run `scripts/unlinksrc.sh` to remove the links before compiling in Arduino IDE.\n\n-----\n## Build for STM32 Blue Pill with PlatformIO\n\nTo build for STM32 Blue Pill on Visual Studio Code and PlatformIO, edit `platformio.ini` and uncomment the `bluepill_f103c8` line (by removing `;` in front):\n\n```ini\nenv_default = bluepill_f103c8\n```\n\nAnd comment the `uno` line (by inserting `;` in front):\n\n```ini\n; env_default = uno\n```\n\n### Install OpenOCD For Displaying STM32 Blue Pill Debug Log\n\n- For Windows:\n\n  1. Download OpenOCD (for debugging the Blue Pill) from the unofficial OpenOCD release website: \u003cbr\u003e\n    https://github.com/gnu-mcu-eclipse/openocd/releases \u003cbr\u003e\n    Look for `gnu-mcu-eclipse-openocd-…-win64.zip`\n\n  1. Unzip the OpenOCD download and copy the OpenOCD files into `c:\\openocd` such that `opencd.exe` is located in the folder `c:\\openocd\\bin`\n\n- For Mac:\n\n  ```bash\n  brew install openocd\n  ```\n\n- For Ubuntu:\n\n  ```bash\n  sudo apt install openocd\n  ```\n\n### For Windows only: Install ST-Link USB Driver\n\n1. For Windows only: Download the ST-Link USB driver from the ST-Link Driver Website (email registration required): \u003cbr\u003e\n  http://www.st.com/en/embedded-software/stsw-link009.html\n\n1. Scroll down and click the `Get Software` button\n\n1. Unzip the ST-Link download. Double-click the `dpinst_amd64.exe` installer.\n\n-----\n## Enabling I2C Interface on STM32 Blue Pill\n\nTo enable the actual STM32 Blue Pill I2C interface to read a real BME280 sensor module (instead of using the BME280 I2C simulator), edit `platform.h` and comment out the following line:\n\n```C++\n//  #define SIMULATE_BME280  //  Uncomment to simulate a BME280 sensor connected to I2C Bus.\n```\n\nRebuild the project. We support only Blue Pill I2C Port 1: \u003cbr\u003e\n`SCL1` = Pin `PB6` \u003cbr\u003e\n`SDA1` = Pin `PB7`\n\n-----\n## Enabling UART Interface on STM32 Blue Pill\n\nTo enable the actual STM32 Blue Pill UART interface to transmit via a real Wisol Sigfox transceiver (instead of using the Wisol Sigfox simulator), edit `platform.h` and comment out the following line:\n\n```C++\n//  #define SIMULATE_WISOL //  Uncomment to simulate a Wisol Sigfox module connected to UART.\n```\n\nThen install the Boost libraries by executing the following script:\n\n_For Windows:_\n\n```cmd\ncd send_altitude_cocoos\nscripts\\install_boost.cmd\n```\n\n_For Mac and Ubuntu:_\n\n```bash\ncd send_altitude_cocoos\nscripts/install_boost.sh\n```\n\nRebuild the project. We support only Blue Pill USART Port 2: \u003cbr\u003e\n`RX2` = Pin `PA3` \u003cbr\u003e\n`TX2` = Pin `PA2`\n\n-----\n## Downlink Server Support\n\n(From https://backend.sigfox.com/apidocs/callback)\n\nWhen a message needs to be acknowledged, the callback selected for the downlink data must \nsend data in the HTTP response. It must contain the 8 bytes data that will be sent to the device \nasking for acknowledgment. The data is JSON formatted, and must be structured as the following :\n\n```json\n  { \"YOUR_DEVICE_ID\" : { \"downlinkData\" : \"deadbeefcafebabe\" } }    \n```\nWith YOUR_DEVICE_ID being replaced by the corresponding device id, in hexadecimal format, up to 8 digits. The downlink data must be 8 bytes in hexadecimal format.  For example:\n\n```json\n  { \"002C2EA1\" : { \"downlinkData\" : \"0102030405060708\" } }\n```\n\nIn AWS Lambda you can create a function to return the downlink like this (use API Gateway to expose as REST URL):\n\n```javascript\n//  Demonstrates a simple Sigfox Downlink HTTP endpoint using AWS Lambda and API Gateway. \nexports.handler = (event, context, callback) =\u003e {\n    console.log('Received event:', JSON.stringify(event, null, 2));    \n    //  Get device ID from the JSON string in the POST request, which looks like:\n    //  {\"device\": \"2C2EA1\", \"data\": \"0102030405060708090a0b0c\", ...}\n    const body = event.body ? JSON.parse(event.body) : {};    \n    const device = body.device || '002C2EA1';  //  Default device ID to 002C2EA1 if missing.\n\n    //  TODO: This is the 8-byte downlink data to be returned, in 16 hex digits.\n    const data = 'fedcba9876543210';\n  \n    //  Compose the JSON downlink response. [device] will be replaced by the device ID.\n    const res = { [device]: { \n        \"downlinkData\" : data\n    } };\n    //  Return the JSON response to API Gateway.\n    return callback(null, {\n        statusCode: 200,\n        body: JSON.stringify(res),\n        headers: { 'Content-Type': 'application/json' },\n    });\n};\n```\n\nNote: Only the first 4 downlinks per day are guaranteed.  You may send more downlink\nrequests but they are not guaranteed.\n\n-----\n## Source Files\n\n[`main.cpp`](main.cpp): Main program. The Arduino application starts here in function `main()`\n\n[`send_altitude_cocoos.ino`](send_altitude_cocoos.ino): Arduino sketch with no code. Arduino IDE requires this file to be present.\n\n-----\n### Network Code\n\n[`sigfox.h`](sigfox.h): Message definitions for the Sigfox network.\n\n[`wisol.cpp`](wisol.cpp), [`wisol.h`](wisol.h): Network Task to receive and aggregate sensor data from Sensor Task and send to the Sigfox network.\n\n[`uart.cpp`](uart.cpp), [`uart.h`](uart.h): UART Task to send and receive network messages to/from the Sigfox network via a Wisol Sigfox module connected to the serial port.\n\n[`aggregate.cpp`](aggregate.cpp), [`aggregate.h`](aggregate.h): Aggregate sensor data from multiple Sensor Tasks and determine if the aggregated sensor data should be sent to the network now.\n\n-----\n### Sensor Code\n\n[`sensor.cpp`](sensor.cpp), [`sensor.h`](sensor.h): Sensor Task to poll sensor data repeatedly\n\n[`bme280.cpp`](bme280.cpp), [`bme280.h`](bme280.h): Interface to BME280 I2C module\n\n[`alt_sensor.cpp`](alt_sensor.cpp), [`alt_sensor.h`](alt_sensor.h): Altitude sensor (BME280 I2C)\n\n[`humid_sensor.cpp`](humid_sensor.cpp), [`humid_sensor.h`](humid_sensor.h): Humidity sensor (BME280 I2C)\n\n[`temp_sensor.cpp`](temp_sensor.cpp), [`temp_sensor.h`](temp_sensor.h): Temperature sensor (BME280 I2C)\n\n[`gyro_sensor.cpp`](gyro_sensor.cpp), [`gyro_sensor.h`](gyro_sensor.h): Gyroscope sensor (simulated)\n\n-----\n### Other Code\n\n[`display.cpp`](display.cpp), [`display.h`](display.h): Display Task to display sensor data\n\n[`scripts/connect.ocd`](scripts/connect.ocd): OpenOCD script to connect to Blue Pill via ST-Link debugger, restart the Blue Pill and display the debug log (Arm Semihosting).  Called by the `Connect To STM32 Blue Pill` task.\n\n-----\n### STM32 Code\n\n[`stm32`](stm32): Platform-specific code for STM32 Blue Pill\n\n[`stm32/bluepill`](stm32/bluepill): STM32 Blue Pill common functions\n\n[`stm32/logger`](stm32/logger): Debugger logging library based on ARM Semihosting\n\n[`stm32/i2cint`](stm32/i2cint): I2C Interface. Simulates BME280 sensor.\n\n[`stm32/uartint`](stm32/uartint): UART Interface. Simulates Wisol Sigfox transceiver.\n\n[`stm32/porting`](stm32/porting): Library for porting Arduino code to STM32\n\n-----\n### Build and Configuration Files\n\n[`.pioenvs`](.pioenvs): Build files for PlatformIO\n\n[`.travis.yml`](.travis.yml): Travis CI file (outdated)\n\n[`.vscode`](.vscode): Configuration files for Visual Studio Code\n\n[`.vscode/tasks.json`](.vscode/tasks.json): Defines the `Connect To STM32 Blue Pill` task for displaying the Blue Pill log via OpenOCD\n\n[`platformio.ini`](platformio.ini): Configuration file for PlatformIO\n\n[`sketch.json`](sketch.json): Arduino sketch details generated by Arduino Web Editor\n\n[`cmake`](cmake), [`CMakeLists.txt`](CMakeLists.txt): CMake files for building in JetBrains CLion\n\n-----\n## Sample Log\n\n-----------------------------------------------------------------------------------\n### Uplink Only\n\n```text\n\u003e Executing task in folder send_altitude_cocoos: platformio device monitor \u003c\n\n--- Miniterm on /dev/cu.usbmodem1411  9600,8,N,1 ---\n--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---\n----arduino_setup\nCreate semaphore\nBME280 OK\nnet \u003e\u003e Wait for net\nnet \u003e\u003e Got net\n\u003e\u003e ATS410=0[0x0d]\n\u003c\u003c OK[0x0d]\n\u003e\u003e AT$I=10[0x0d]\n\u003c\u003c 002C2EA1[0x0d]\n - wisol.getID: 002C2EA1\n\u003e\u003e AT$I=11[0x0d]\n\u003c\u003c 5BEB8CG64E869BD1[0x0d]\n - wisol.getPAC: 5BEB8CG64E869BD1\nnet \u003e\u003e Release net\ntmp \u003e\u003e poll_sensor\nhmd \u003e\u003e poll_sensor\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 114.54\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.15\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.09\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 112.06\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.13\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.08\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 114.19\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.13\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.08\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 116.10\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.13\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.09\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 115.15\nagg \u003e\u003e Send 0000034105601151\nnet \u003e\u003e Wait for net\nnet \u003e\u003e Got net\n\u003e\u003e AT$GI?[0x0d]\n\u003c\u003c 1,6[0x0d]\n\u003e\u003e AT[0x0d]\n\u003c\u003c OK[0x0d]\nnet \u003e\u003e Release net\n\u003e\u003e AT$SF=0000034105601151[0x0d]\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.12\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.09\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 113.02\n\u003c\u003c OK[0x0d]\nnet \u003e\u003e Pending response\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.11\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.10\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 113.74\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.10\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.08\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 113.16\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.11\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.10\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 114.22\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.11\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.10\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 114.22\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.11\nagg \u003e\u003e Send 0001034105601142\nnet \u003e\u003e Wait for net\nnet \u003e\u003e Got net\n\u003e\u003e AT$GI?[0x0d]\n\u003c\u003c 1,3[0x0d]\n\u003e\u003e AT[0x0d]\n\u003c\u003c OK[0x0d]\nnet \u003e\u003e Release net\n\u003e\u003e AT$SF=0001034105601142[0x0d]\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.08\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 113.28\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.09\n\u003c\u003c OK[0x0d]\nnet \u003e\u003e Pending response\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.08\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 114.11\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.09\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.07\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 112.70\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.08\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.08\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 112.70\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.08\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.07\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 114.36\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.08\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.05\nagg \u003e\u003e Send 0002034005601143\nnet \u003e\u003e Wait for net\nnet \u003e\u003e Got net\n\u003e\u003e AT$GI?[0x0d]\n\u003c\u003c 1,0[0x0d]\n\u003e\u003e AT$RC[0x0d]\n\u003c\u003c OK[0x0d]\nnet \u003e\u003e Release net\n\u003e␂\nQ�SF=0002034005601143[0x0d]\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 114.84\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.08\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.07\n\u003c\u003c OK[0x0d]\nnet \u003e\u003e Pending response\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 114.36\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.08\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.06\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 114.01\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.08\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.06\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 113.77\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.07\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.06\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 113.18\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.06\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.06\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 113.77\nagg \u003e\u003e Send 0003034005601137\nnet \u003e\u003e Wait for net\nnet \u003e\u003e Got net\n\u003e\u003e AT$GI?[0x0d]\n\u003c\u003c 1,3[0x0d]\n\u003e\u003e AT[0x0d]\n\u003c\u003c OK[0x0d]\nnet \u003e\u003e Release net\n\u003e\u003e AT$SF=0003034005601137[0x0d]\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.07\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.06\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 113.77\n\u003c\u003c OK[0x0d]\nnet \u003e\u003e Pending response\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.07\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.04\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 115.08\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.07\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.06\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 114.60\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.06\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.07\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 115.08\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.06\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.04\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 113.18\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.07\nagg \u003e\u003e Send 0004034005601131\nnet \u003e\u003e Wait for net\nnet \u003e\u003e Got net\n\u003e\u003e AT$GI?[0x0d]\n\u003c\u003c 1,0[0x0d]\n\u003e\u003e AT$RC[0x0d]\n\u003c\u003c OK[0x0d]\nnet \u003e\u003e Release net\n\u003e\u003e AT$SF=0004034005601131[0x0d]\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.03\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 113.65\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.06\n\u003c\u003c OK[0x0d]\nnet \u003e\u003e Pending response\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 56.04\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 114.48\n\n\n```\n\n-----------------------------------------------------------------------------------\n### Uplink and Downlink\n\n```text\n\u003e Executing task in folder send_altitude_cocoos: platformio device monitor \u003c\n\n--- Miniterm on /dev/cu.usbmodem1411  9600,8,N,1 ---\n--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---\n----arduino_setup\nCreate semaphore\nBME280 OK\nnet \u003e\u003e Wait for net\nnet \u003e\u003e Got net\n\u003e\u003e ATS410=0[0x0d]\n\u003c\u003c OK[0x0d]\n\u003e\u003e AT$I=10[0x0d]\n\u003c\u003c 002C2EA1[0x0d]\n - wisol.getID: 002C2EA1\n\u003e\u003e AT$I=11[0x0d]\n\u003c\u003c 5BEB8CF64E869BD1[0x0d]\n - wisol.getPAC: 5BEB8CF64E869BD1\nnet \u003e\u003e Release net\ntmp \u003e\u003e poll_sensor\nhmd \u003e\u003e poll_sensor\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 133.44\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.20\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.59\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 133.44\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.19\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.59\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 133.09\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.19\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.59\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 133.09\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.18\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.59\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 135.23\nagg \u003e\u003e Send 0000034105451352\nnet \u003e\u003e Wait for net\nnet \u003e\u003e Got net\n\u003e\u003e AT$GI?[0x0d]\n\u003c\u003c 1,6[0x0d]\n\u003e\u003e AT[0x0d]\n\u003c\u003c OK[0x0d]\nnet \u003e\u003e Release net\n\u003e\u003e AT$SF=0000034105451352,1[0x0d]\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.18\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.60\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 134.17\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.18\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.61\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 134.88\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.18\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.63\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 133.46\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.18\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.63\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 133.82\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.18\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.63\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 132.99\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.18\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.62\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 134.05\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.17\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.62\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 132.05\n\u003c\u003c OK[0x0d][0x0a]RX=FE DC BA 98 76 54 32 10[0x0d]\nnet \u003e\u003e Pending response\n - process_downlink_msg: FEDCBA9876543210\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.16\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.65\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 132.29\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.16\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.62\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 132.40\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.16\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.62\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 133.58\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.17\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.62\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 133.23\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.17\nagg \u003e\u003e Send 0001034105461332\nnet \u003e\u003e Wait for net\nnet \u003e\u003e Got net\n\u003e\u003e AT$GI?[0x0d]\n\u003c\u003c 1,5[0x0d]\n\u003e\u003e AT[0x0d]\n\u003c\u003c OK[0x0d]\nnet \u003e\u003e Release net\n\u003e\u003e AT$SF=0001034105461332,1[0x0d]\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.62\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 132.05\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.17\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.64\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 133.95\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.17\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.63\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 133.46\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.17\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.63\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 133.23\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.17\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.65\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 132.88\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.16\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.64\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 133.95\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.15\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.63\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 133.71\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.16\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.65\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 134.54\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.17\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.68\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 133.12\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.16\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.66\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 132.53\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.17\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.67\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 134.88\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.16\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.66\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 133.46\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.16\n\u003c\u003c (Timeout)\n\u003c\u003c ERR_SFX_ERR_SEND_FRAME_WAIT_TIMEOUT[0x0d][0x0a]\n***** uart.sendData: Error: Unknown response: ERR_SFX_ERR_SEND_FRAME_WAIT_TIMEOUT\n\nnet \u003e\u003e Pending response\n***** Error: network_task Failed, response: ERR_SFX_ERR_SEND_FRAME_WAIT_TIMEOUT\n - process_downlink_msg (Failed): ERR_SFX_ERR_SEND_FRAME_WAIT_TIMEOUT\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.64\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 133.82\ntmp \u003e\u003e poll_sensor\ntmp \u003c\u003c Recv sensor data 34.18\nhmd \u003e\u003e poll_sensor\nhmd \u003c\u003c Recv sensor data 54.63\nalt \u003e\u003e poll_sensor\nalt \u003c\u003c Recv sensor data 133.34\n\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flupyuen%2Fsend_altitude_cocoos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flupyuen%2Fsend_altitude_cocoos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flupyuen%2Fsend_altitude_cocoos/lists"}