Bird
Raised Fist0
Raspberry Piprogramming~20 mins

REST API for IoT device in Raspberry Pi - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
IoT REST API Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this Flask REST API endpoint code?

Consider this simple Flask REST API code running on a Raspberry Pi controlling an LED. What will be the output when you send a GET request to /led/status?

Raspberry Pi
from flask import Flask, jsonify
app = Flask(__name__)

led_state = False

@app.route('/led/status')
def led_status():
    return jsonify({'led': 'on' if led_state else 'off'})

if __name__ == '__main__':
    app.run(host='0.0.0.0')
A{"led": "on"}
B{"led": "off"}
C500 Internal Server Error
D404 Not Found
Attempts:
2 left
💡 Hint

Look at the initial value of led_state.

🧠 Conceptual
intermediate
1:30remaining
Which HTTP method is best to toggle an IoT device state?

You want to create a REST API to toggle an LED on a Raspberry Pi. Which HTTP method should you use to change the LED state?

ADELETE
BGET
CPUT
DPOST
Attempts:
2 left
💡 Hint

Think about which method is used to create or change data on the server.

🔧 Debug
advanced
2:30remaining
What error does this Raspberry Pi REST API code raise?

Examine this Flask code snippet for controlling a sensor. What error will it raise when running?

Raspberry Pi
from flask import Flask, request, jsonify
app = Flask(__name__)

sensor_value = 0

@app.route('/sensor', methods=['POST'])
def update_sensor():
    data = request.json
    return jsonify({'sensor': sensor_value})
    sensor_value = data['value']
    return jsonify({'sensor': sensor_value})

if __name__ == '__main__':
    app.run()
AUnboundLocalError: local variable 'sensor_value' referenced before assignment
BNo error, returns updated sensor value
CTypeError: 'NoneType' object is not subscriptable
DKeyError: 'value'
Attempts:
2 left
💡 Hint

Look at how sensor_value is assigned inside the function.

📝 Syntax
advanced
2:00remaining
Which option correctly defines a Flask route to turn on an LED?

Choose the correct Flask route definition to turn on an LED when a POST request is sent to /led/on.

A
@app.route('/led/on', methods=['POST'])
def led_on():
    turn_on_led()
    return 'LED is on'
B
@app.route('/led/on')
def led_on():
    turn_on_led()
    return 'LED is on'
C
@app.route('/led/on', method=['POST'])
def led_on():
    turn_on_led()
    return 'LED is on'
D
@app.route('/led/on', methods='POST')
def led_on():
    turn_on_led()
    return 'LED is on'
Attempts:
2 left
💡 Hint

Check the correct keyword and data type for HTTP methods in Flask routes.

🚀 Application
expert
1:30remaining
What is the number of items in the JSON response from this Raspberry Pi REST API code?

This Flask API returns sensor readings as JSON. How many key-value pairs are in the JSON response?

Raspberry Pi
from flask import Flask, jsonify
app = Flask(__name__)

@app.route('/sensors')
def sensors():
    data = {
        'temperature': 22.5,
        'humidity': 45,
        'pressure': 1013
    }
    return jsonify(data)

if __name__ == '__main__':
    app.run()
A2
B1
C3
D4
Attempts:
2 left
💡 Hint

Count the keys in the data dictionary.

Practice

(1/5)
1. What is the main purpose of a REST API on a Raspberry Pi IoT device?
easy
A. To connect the Raspberry Pi to a monitor
B. To allow remote communication and control over the network
C. To store large amounts of data locally
D. To increase the Raspberry Pi's processing speed

Solution

  1. Step 1: Understand REST API role

    A REST API enables devices to communicate over a network using standard web protocols.
  2. Step 2: Identify IoT device needs

    IoT devices use REST APIs to send sensor data or receive commands remotely.
  3. Final Answer:

    To allow remote communication and control over the network -> Option B
  4. Quick Check:

    REST API = Remote communication [OK]
Hint: REST APIs enable network communication for IoT devices [OK]
Common Mistakes:
  • Confusing REST API with hardware speed
  • Thinking REST API stores data locally
  • Assuming REST API connects to display devices
2. Which Python library is commonly used on Raspberry Pi to create a REST API for IoT devices?
easy
A. Flask
B. NumPy
C. Pandas
D. Matplotlib

Solution

  1. Step 1: Identify common Python libraries

    NumPy, Pandas, and Matplotlib are for data processing and visualization, not REST APIs.
  2. Step 2: Recognize Flask's role

    Flask is a lightweight web framework used to build REST APIs easily on Raspberry Pi.
  3. Final Answer:

    Flask -> Option A
  4. Quick Check:

    Flask = REST API framework [OK]
Hint: Flask is the go-to Python web framework for REST APIs [OK]
Common Mistakes:
  • Choosing data libraries instead of web frameworks
  • Confusing Flask with data analysis tools
  • Assuming Matplotlib creates APIs
3. What will be the output of this Flask route code on a Raspberry Pi?
from flask import Flask, jsonify
app = Flask(__name__)

@app.route('/sensor')
def sensor():
    data = {'temperature': 22, 'humidity': 60}
    return jsonify(data)

# Assume app is running and /sensor is requested
medium
A. {"temperature": 22, "humidity": 60}
B. temperature=22, humidity=60
C. temperature: 22, humidity: 60
D. Error: jsonify not defined

Solution

  1. Step 1: Understand jsonify function

    jsonify converts Python dict to JSON string with correct headers for API response.
  2. Step 2: Analyze route output

    The route returns JSON with keys 'temperature' and 'humidity' and their values.
  3. Final Answer:

    {"temperature": 22, "humidity": 60} -> Option A
  4. Quick Check:

    jsonify(dict) = JSON string [OK]
Hint: jsonify returns JSON string from dict in Flask [OK]
Common Mistakes:
  • Expecting plain text instead of JSON
  • Confusing jsonify with HTML output
  • Missing import of jsonify causing errors
4. Identify the error in this Flask route code for Raspberry Pi IoT device:
from flask import Flask
app = Flask(__name__)

@app.route('/led/on')
def led_on():
    GPIO.output(17, True)
    return 'LED is ON'
medium
A. Return statement must be JSON, not string
B. Route decorator syntax is incorrect
C. Missing import and setup for GPIO module
D. Flask app is not created properly

Solution

  1. Step 1: Check GPIO usage

    GPIO module must be imported and configured before use to control pins.
  2. Step 2: Verify code completeness

    Code lacks 'import RPi.GPIO as GPIO' and GPIO setup like GPIO.setmode() and GPIO.setup().
  3. Final Answer:

    Missing import and setup for GPIO module -> Option C
  4. Quick Check:

    GPIO needs import and setup before use [OK]
Hint: Always import and setup GPIO before controlling pins [OK]
Common Mistakes:
  • Assuming Flask route syntax is wrong
  • Thinking return must be JSON always
  • Ignoring GPIO initialization steps
5. You want to create a REST API on Raspberry Pi that returns sensor data only if temperature is above 25°C. Which code snippet correctly implements this logic using Flask?
hard
A. from flask import Flask, jsonify app = Flask(__name__) @app.route('/sensor') def sensor(): temp = 30 if temp >= 25: return {'temperature': temp} else: return {'message': 'Temperature too low'}
B. from flask import Flask, jsonify app = Flask(__name__) @app.route('/sensor') def sensor(): temp = 20 if temp < 25: return jsonify({'temperature': temp}) else: return jsonify({'message': 'Temperature too low'})
C. from flask import Flask app = Flask(__name__) @app.route('/sensor') def sensor(): temp = 30 if temp > 25: return {'temperature': temp} else: return {'message': 'Temperature too low'}
D. from flask import Flask, jsonify app = Flask(__name__) @app.route('/sensor') def sensor(): temp = 30 if temp > 25: return jsonify({'temperature': temp}) else: return jsonify({'message': 'Temperature too low'})

Solution

  1. Step 1: Check temperature condition logic

    We want to return data only if temperature is above 25, so 'temp > 25' is correct.
  2. Step 2: Verify response format

    Flask needs jsonify to return proper JSON response with correct headers.
  3. Final Answer:

    Code with temp=30, condition temp > 25, and jsonify responses -> Option D
  4. Quick Check:

    Use temp > 25 and jsonify for JSON response [OK]
Hint: Use if temp > 25 and jsonify() to return JSON [OK]
Common Mistakes:
  • Using wrong temperature comparison operator
  • Returning dict without jsonify causing errors
  • Setting temperature below threshold incorrectly
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard