WebSocket lets your Raspberry Pi talk to a web page instantly. It helps send live updates without waiting.
WebSocket for live updates in Raspberry Pi
import asyncio import websockets async def handler(websocket): async for message in websocket: await websocket.send(f"Got your message: {message}") async def main(): async with websockets.serve(handler, "localhost", 8765): await asyncio.Future() # run forever asyncio.run(main())
This example uses Python's asyncio and websockets library.
The server listens on port 8765 and sends back messages it receives.
import asyncio import websockets async def handler(websocket): await websocket.send("Hello from Raspberry Pi!") async for message in websocket: print(f"Received: {message}") async def main(): async with websockets.serve(handler, "localhost", 8765): await asyncio.Future() asyncio.run(main())
import asyncio import websockets async def handler(websocket): while True: data = get_sensor_data() # pretend function await websocket.send(str(data)) await asyncio.sleep(1) # send every second async def main(): async with websockets.serve(handler, "localhost", 8765): await asyncio.Future() asyncio.run(main())
This program runs a WebSocket server on your Raspberry Pi. It sends a fake temperature reading every 2 seconds to any connected client.
import asyncio import websockets import random async def handler(websocket): while True: temp = random.uniform(20.0, 25.0) # fake temperature message = f"Temperature: {temp:.2f} °C" await websocket.send(message) await asyncio.sleep(2) async def main(): async with websockets.serve(handler, "localhost", 8765): print("WebSocket server started on ws://localhost:8765") await asyncio.Future() # run forever asyncio.run(main())
Make sure to install the websockets library with pip install websockets.
WebSocket connections stay open, so they use less data than asking the server again and again.
Use localhost for testing on the same device, but use your Pi's IP address for other devices.
WebSocket lets your Raspberry Pi send live updates to web pages instantly.
It keeps a connection open so data flows both ways without delay.
Use it for real-time sensor data, controls, or notifications.
Practice
Solution
Step 1: Understand WebSocket connection behavior
WebSocket keeps a connection open between the Raspberry Pi and the web page, allowing data to flow instantly both ways.Step 2: Compare options with WebSocket features
Options A, B, and C do not describe WebSocket's live, continuous connection feature.Final Answer:
It keeps a connection open for instant two-way data flow. -> Option AQuick Check:
WebSocket = open two-way connection [OK]
- Thinking WebSocket sends data only once
- Confusing WebSocket with HTTP request-response
- Assuming WebSocket works offline
Solution
Step 1: Recall correct WebSocket syntax in JavaScript
The correct syntax to create a WebSocket client is using the WebSocket constructor with the URL starting with 'ws://' or 'wss://'.Step 2: Check each option's syntax
const socket = new WebSocket('ws://localhost:8080'); uses 'new WebSocket' with 'ws://' which is correct. Options A, B, and D use incorrect methods or protocols.Final Answer:
const socket = new WebSocket('ws://localhost:8080'); -> Option DQuick Check:
WebSocket client = new WebSocket('ws://...') [OK]
- Using 'http://' instead of 'ws://'
- Calling WebSocket as a function without 'new'
- Using undefined methods like WebSocket.connect
import asyncio
import websockets
async def handler(websocket):
message = await websocket.recv()
print(f'Received: {message}')
async def main():
async with websockets.serve(handler, 'localhost', 8765):
await asyncio.Future()
asyncio.run(main())Solution
Step 1: Understand the handler function
The handler waits to receive a message from the client and then prints it with 'Received: ' prefix.Step 2: Analyze what happens when client sends 'Hello'
The message 'Hello' is received and printed as 'Received: Hello'.Final Answer:
Received: Hello -> Option AQuick Check:
Received message = 'Hello' [OK]
- Assuming it prints 'websocket' instead of message
- Expecting an error without client connection
- Thinking it prints None if message missing
import asyncio
import websockets
async def handler(websocket):
while True:
message = websocket.recv()
print(message)
async def main():
async with websockets.serve(handler, 'localhost', 8765):
await asyncio.Future()
asyncio.run(main())Solution
Step 1: Check asynchronous calls in handler
The 'websocket.recv()' is a coroutine and must be awaited to get the message.Step 2: Verify other parts of the code
Address 'localhost' is valid, the loop inside handler is correct for continuous receiving, and 'asyncio.run' is the proper way to start.Final Answer:
Missing 'await' before websocket.recv() call. -> Option CQuick Check:
Await async calls like websocket.recv() [OK]
- Forgetting 'await' on async calls
- Misplacing the while loop
- Using wrong asyncio start function
Solution
Step 1: Understand WebSocket usage for live updates
WebSocket keeps a connection open, so sending data only when it changes over the same connection is efficient and instant.Step 2: Evaluate other options
Opening new connections repeatedly (B) wastes resources. Sending data only on reload (C) or using HTTP polling (D) is slower and less real-time.Final Answer:
Open a WebSocket connection once, then send new temperature data whenever it changes. -> Option BQuick Check:
One open connection + send updates = instant live data [OK]
- Opening multiple connections unnecessarily
- Relying on page reloads for updates
- Using HTTP polling instead of WebSocket
Ready to prove it?
Pass the test and this pattern moves unknown
