×
Community Blog Connecting Raspberry Pi to the Alibaba Cloud IoT Platform Using Python

Connecting Raspberry Pi to the Alibaba Cloud IoT Platform Using Python

In this article, MVP Liu Hongfeng shares his experience of using the Alibaba Cloud IoT Platform to connect a Raspberry Pi device to the cloud.

Join us at the Alibaba Cloud ACtivate Online Conference on March 5-6 to challenge assumptions, exchange ideas, and explore what is possible through digital transformation.

Written by Hongfeng Liu, Alibaba Cloud MVP

As an Alibaba Cloud MVP, I have the honor of being one of the first persons to test the Alibaba Cloud IoT Platform from a user's perspective. I am familiar with the Alibaba Cloud IoT Platform and have had the privilege of participating in some hardware access work for the Feifeng Platform (the predecessor of Link Develop, a one-stop development platform) from the start. I also witnessed the rapid expansion of the Alibaba Cloud IoT team from dozens to hundreds of people. The content hosted on its IoT Platform expanded just as rapidly, including the basic edition of the IoT Development Kit, Feifeng, one-stop Development Platform - Link Develop, the advanced edition of the IoT Development Kit, Feiyan, Feixiang, City Brain, Agricultural Brain, and Industrial Interconnection Platform. It is, therefore, a challenge to keep up with and fully understand each IoT product of Alibaba Cloud.

At first, we used the MCU single-chip +.NET MF platform and directly used the MQTT protocol to implement relevant code to connect the Alibaba Cloud Platform. Although the IoT Platform can also be flexibly connected based on the configuration, it is still unfamiliar to some WEB, AI, and cloud developers. Because of these requirements, advanced languages, such as JS, Java, and Python, have entered into hardware development and can be run directly on MCU chips, greatly speeding up the connection between the cloud and IoT devices.

This article uses Python, an advanced language, to connect the cloud and the IoT device based on Raspberry Pi. In a previous article, I have discussed how to perform this using Node.js.

The following is the test hardware delivered by the Alibaba Cloud team:

1

  1. Raspberry Pi 3B with Wi-Fi and Bluetooth
  2. DHT11 temperature and humidity module
  3. LED module

Step 1: Install OS for Raspberry Pi

We must install the operating system for Raspberry Pi

We are installing the Raspbian firmware, which can be installed according to the steps provided here:https://www.yuque.com/cloud-dev/iot-tech/ig269q

Step 2: Install Python SDK

Install the Python SDK for the Alibaba Cloud Platform

Execute the following command: $ pip install aliyun-python-sdk-iot-client

Step 3: Write the Code

After installing the Raspbian firmware and the Python SDK, we need to write a code in Python to run our project. The sample code has already been provided in the Alibaba Cloud Platform document (https://www.yuque.com/cloud-dev/iot-tech/rz6fpl ), but the function is relatively simple, just sending two random numbers to the cloud.

We design a relatively complex scenario in which we must realize the two-way communication first, so that the sensor data can be sent to the cloud and a command can be sent from the cloud to control related devices.

For uploading data, we select a real sensor DHT11, which can obtain the temperature and humidity values. In addition, an LED module is also provided to control the on and off state of the light through the commands sent from the cloud.

The pin definition figure of Raspberry Pi is as follows:

2

The DHT11 module consists of three lines, which belong to single bus communication. We connect the power line to 5V-4pin, the ground line to GND-6pin, and the communication pin to GPIO16-36pin. The LED module also consists of three lines. We connect the power line to 3V3-1pin, the ground line to GND-9pin, and the control line to GPIO4-7pin.

3

It is relatively easy to realize LED control by simply controlling the high and low levels of the pins.

led_pin = 4 //GPIO is 4
 GPIO.setmode(GPIO.BCM) //GPIO definition of BCM 
 GPIO.setup(led_pin, GPIO.OUT) //Set to output mode

Turn on the light:

GPIO.output(led_pin, GPIO.HIGH)
Turn off the light:
GPIO.output(led_pin, GPIO.LOW)

The DHT11 is relatively complex. For further information, refer to a blog post I wrote in 2010 (related links:https://blog.csdn.net/yfiot/article/details/5996524).

4

Due to the large amount of code, we package it as a function that returns two values at the same time, one for temperature (T) and the other for humidity (H).

Most examples using Python on the Internet read temperature and humidity once. If continuous reading is required, the time interval must be about 3 seconds; otherwise, it can easily fail. Linux is not a real-time system, so we have found that, even if the time interval is 3 seconds, sometimes the temperature and humidity values cannot be correctly obtained, and sometimes incorrect values that have passed verification are retrieved.

The data pin of DHT11 is connected to GPIO16, so we define the pin code as follows:

dht_pin =16
The code that encapsulates the function is as follows:
def GetDTH(): 
 data = []
 j = 0 
 GPIO.setup(dht_pin, GPIO.OUT)
 GPIO.output(dht_pin, GPIO.LOW)
 time.sleep(0.02)
 GPIO.output(dht_pin, GPIO.HIGH)
 GPIO.setup(dht_pin, GPIO.IN)
  
 while GPIO.input(dht_pin) == GPIO.LOW:
  continue
 while GPIO.input(dht_pin) == GPIO.HIGH:
  continue
  
 while j < 40:
  k = 0
  while GPIO.input(dht_pin) == GPIO.LOW:
  continue
  while GPIO.input(dht_pin) == GPIO.HIGH:
  k += 1
  if k > 100:
  break
  if k < 8:
  data.append(0)
  else:
  data.append(1)  
  j += 1
  
 humidity_bit = data[0:8]
 humidity_point_bit = data[8:16]
 temperature_bit = data[16:24]
 temperature_point_bit = data[24:32]
 check_bit = data[32:40]
  
 humidity = 0
 humidity_point = 0
 temperature = 0
 temperature_point = 0
 check = 0
  
 for i in range(8):
  humidity += humidity_bit[i] * 2 ** (7-i)
  humidity_point += humidity_point_bit[i] * 2 ** (7-i)
  temperature += temperature_bit[i] * 2 ** (7-i)
  temperature_point += temperature_point_bit[i] * 2 ** (7-i)
  check += check_bit[i] * 2 ** (7-i)
  
 tmp = humidity + humidity_point + temperature + temperature_point
 if check == tmp:
  return temperature,humidity
 else:
  print "wrong"
  return 0,0 

When these preparations are completed, we are going to define relevant products and devices in the cloud. Unlike the official sample provided by Alibaba Cloud, we added an attribute LED, which is capable of read and write and uses enumerated variables, with 0 indicating to turn the lights off and 1 indicating to turn the lights on.

5

When this is defined, we create the device and get the device trituples. The official sample provided is only simulated data and is for one-way upload, so we must modify it.

In the main function, add this code:

client.on_message = on_message

This means that we can obtain information pushed from the cloud.

The information content pushed by the cloud is as follows:

{"method":"thing.service.property.set","id":"169885527","params":{"LED":1},"version":"1.0.0"}

We need to obtain the value of LED, so we need to add something to the on_message function:

 setjson = json.loads(msg.payload)
 led = setjson['params']['LED']
 GPIO.output(led_pin,(GPIO.HIGH if led==1 else GPIO.LOW ))

Turn the light on or off based on the value of the LED.

After the relevant code is modified, we can upload it to the Raspberry Pi device and start running, as shown in the following figure:

6

At this time, when checking the status of the cloud device, we can see that the data has been uploaded to the cloud normally.

7

We perform a data distribution test on the online debugging panel of cloud products

8

When sending 0 or 1, we can see that the LED is off or on.

In general, we find that IoT code can be easily written using the familiar Python language.

0 0 0
Share on

GXIC

24 posts | 5 followers

You may also like

Comments

GXIC

24 posts | 5 followers

Related Products

  • IoT Platform

    Provides secure and reliable communication between devices and the IoT Platform which allows you to manage a large number of devices on a single IoT Platform.

    Learn More
  • IoT Solution

    A cloud solution for smart technology providers to quickly build stable, cost-efficient, and reliable ubiquitous platforms

    Learn More
  • API Gateway

    API Gateway provides you with high-performance and high-availability API hosting services to deploy and release your APIs on Alibaba Cloud products.

    Learn More
  • Global Internet Access Solution

    Migrate your Internet Data Center’s (IDC) Internet gateway to the cloud securely through Alibaba Cloud’s high-quality Internet bandwidth and premium Mainland China route.

    Learn More