5.1 KiB
5.1 KiB
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_30callback (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.cto node1 executable sources- Backend server configuration variables
- Compile definitions for
BACKEND_SERVER_IPandBACKEND_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
-
Start the Go server:
cd event_proxy go run main.goYou should see:
{"time":"...","level":"INFO","msg":"Starting TCP server","address":"192.168.1.153:8080"} -
Flash the Pico W:
# Use your flash.sh script or: cp build/node1.uf2 /Volumes/RPI-RP2/ -
Monitor the Pico:
# Use your screen.sh script or: screen /dev/tty.usbmodem* 115200 -
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: 10On 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_connectedis 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
- Run it! Flash the Pico and start the Go server
- Monitor both to verify data flow
- Process the data in your Go server (parse JSON, store to DB, forward to Home Assistant, etc.)
- Adjust timing if needed by changing
LOOP_INTERVAL_MS
Files Reference
tcp_client.h- TCP client headertcp_client.c- TCP client implementationnode1.c- Main application (updated)CmakeLists.txt- Build configuration (updated)TCP_CLIENT_README.md- Detailed API documentationevent_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!