balcony_weather_station/INTEGRATION_COMPLETE.md

5.1 KiB
Raw Blame History

TCP Client Integration Complete ✓

The node1.c file has been successfully updated to use the TCP client library to send sensor data to your Go backend server.

Changes Made

1. node1.c

Added:

  • WiFi and backend server configuration defines
  • wifi_init() function to connect to WiFi
  • TCP client initialization in main()
  • Actual message sending in cb_30 callback (replaced commented-out code)
  • Error handling for WiFi/TCP failures

Key Features:

  • WiFi connects on startup with 30-second timeout
  • If WiFi fails, sensor readings continue but data isn't sent
  • Every 5 minutes (10 readings × 10 seconds), sends JSON to your Go server
  • Comms LED blinks on successful sends
  • Prints status messages to serial output

2. CmakeLists.txt

Added:

  • tcp_client.c to node1 executable sources
  • Backend server configuration variables
  • Compile definitions for BACKEND_SERVER_IP and BACKEND_SERVER_PORT

Message Format

The Pico sends JSON messages to 192.168.1.153:8080:

{"temperature":23.50,"pressure":1013.25,"humidity":45.00,"pm1":10.00,"pm2_5":25.50,"pm10":50.00}

Your Go server will receive this in the handleConnection function and log it with structured logging.

Building

cd build
cmake .. \
  -DWIFI_SSID="your_ssid" \
  -DWIFI_PASSWORD="your_password" \
  -DMQTT_SERVER="your_mqtt_server" \
  -DMQTT_USERNAME="mqtt_user" \
  -DMQTT_PASSWORD="mqtt_pass" \
  -DBACKEND_SERVER_IP="192.168.1.153" \
  -DBACKEND_SERVER_PORT=8080
make node1

Or if you have a build script that sets environment variables, just run it.

Testing

  1. Start the Go server:

    cd event_proxy
    go run main.go
    

    You should see:

    {"time":"...","level":"INFO","msg":"Starting TCP server","address":"192.168.1.153:8080"}
    
  2. Flash the Pico W:

    # Use your flash.sh script or:
    cp build/node1.uf2 /Volumes/RPI-RP2/
    
  3. Monitor the Pico:

    # Use your screen.sh script or:
    screen /dev/tty.usbmodem* 115200
    
  4. Watch for connection messages:

    On Pico serial output:

    Initializing WiFi...
    Connecting to WiFi 'your_ssid'...
    WiFi connected successfully
    TCP client ready: 192.168.1.153:8080
    Making BME280 Reading
    cb_30: 0
    ...
    cb_30: 9
    Preparing data to send
    Temperature: 23.50
    Pressure: 1013.25
    Humidity: 45.00
    PM1: 10.00
    PM2.5: 25.50
    PM10: 50.00
    Sending data to backend server...
    tcp_client: connecting to 192.168.1.153 port 8080
    tcp_client: connected, sending message
    tcp_client: sent 108 bytes
    tcp_client: message sent completely
    tcp_client: send success
    ✓ Data sent successfully
    COMMS LED BLINK COUNT: 10
    

    On Go server output:

    {"time":"...","level":"INFO","msg":"New connection","remote_addr":"192.168.1.xxx:xxxxx"}
    {"time":"...","level":"INFO","msg":"Received message","message":"{\"temperature\":23.50,\"pressure\":1013.25,\"humidity\":45.00,\"pm1\":10.00,\"pm2_5\":25.50,\"pm10\":50.00}\n","bytes":108}
    {"time":"...","level":"INFO","msg":"Error reading from connection","error":"EOF"}
    

Configuration

All configuration is in CMake variables or defines:

Variable Default Description
WIFI_SSID - Your WiFi network name
WIFI_PASSWORD - Your WiFi password
BACKEND_SERVER_IP 192.168.1.153 Your Go server IP
BACKEND_SERVER_PORT 8080 Your Go server port
LOOP_INTERVAL_MS 10000 Time between readings (10 sec)

Timing

  • Reading interval: 10 seconds (configured by LOOP_INTERVAL_MS)
  • Readings per batch: 10
  • Send interval: 100 seconds (~1.7 minutes)
  • Connection timeout: 10 seconds
  • Watchdog timeout: 60 seconds
  • Auto-restart: 24 hours

Troubleshooting

WiFi not connecting

  • Check SSID and password in build command
  • Ensure WiFi is 2.4GHz (Pico W doesn't support 5GHz)
  • Monitor serial output for detailed error messages

TCP connection fails

  • Verify Go server is running: go run event_proxy/main.go
  • Check server IP is correct: 192.168.1.153
  • Ensure both devices are on same network
  • Check firewall settings on server machine

Data not arriving at server

  • Verify wifi_connected is true in serial output
  • Check for "✓ Data sent successfully" messages
  • Look for connection logs in Go server output
  • Increase timeout if network is slow (change 10000 to 20000)

Next Steps

  1. Run it! Flash the Pico and start the Go server
  2. Monitor both to verify data flow
  3. Process the data in your Go server (parse JSON, store to DB, forward to Home Assistant, etc.)
  4. Adjust timing if needed by changing LOOP_INTERVAL_MS

Files Reference

  • tcp_client.h - TCP client header
  • tcp_client.c - TCP client implementation
  • node1.c - Main application (updated)
  • CmakeLists.txt - Build configuration (updated)
  • TCP_CLIENT_README.md - Detailed API documentation
  • event_proxy/main.go - Your Go TCP server

Success! 🎉

Your Pico W weather station now sends sensor data over WiFi to your Go backend server every ~1.7 minutes!