基于cc3200+micropython来实现电压温度实时采集并且存入Mysql

1、完成度评价

  • 我们选择的题目是基于cc3200的wifi传感器,基本完成了wifi擦混输链路构建,电压温度,湿度等数据的采集。
  • 并建立socket连接实现采集数据的传输。可以实现浏览器访问以及数据实时存入Mysql数库。同时也实现了底层C语言封装python接口函数的基本操作,封装了电压量化函数mymath.ad()。

2、方法

  • 服务端(pycharm):利用pycharm作为IDE,从而在pycharm上编写一个socket 服务,用来监听cc3200端。进一步解码数据,同时实时接收到的端口数据存入数据库中
  • 客户端(cc3200):编译micropython包,成功移植micropython之后,熟悉micropython基本开发语句。利用python编写数据发送,连接热点,创建socket客户端,采集,连续发送等函数。最终实现想服务端连续发送数据。由于ad采集的电压数据是没有量化处理的数据,为了进一步了解C语言到micropython封装的过程,首先添加一个接口module-mymath,进一步在这个module下面封装一个电压量化的function。

3、具体实现

1.PC端创建socket服务以及数据库表单的创建

import pymysql
import time
import json
import codecs
import random
import socket  # 导入 socket 模块
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('192.168.1.2', 52))        # 绑定端口
s.listen(5)  # 等待客户端连接
def mysql_create():
    db = pymysql.connect(host='127.0.0.1', port=3306, database='noise--1', user='root', password='1996424')
    cursor = db.cursor()
    cursor.execute("DROP TABLE IF EXISTS cc3200")
    sql = """CREATE TABLE cc3200 (time0 char(100),id  CHAR(20) ,Voltage FLOAT(20),temp FLOAT(20))"""
    cursor.execute(sql)# 执行SQL语句
    db.close()

# def insertmysql(ti,x,vol):
#
#     cursor = db.cursor()
#     sql = """INSERT INTO cc3200(time0,id,Voltage)VALUES (ti, x, vol )"""
#     try:
# #         # 执行sql语句
# #         cursor.execute(sql)
# #         # 提交到数据库执行
# #         db.commit()
# #     except:
# #         # 如果发生错误则回滚
# #         db.rollback()
# #     # 关闭数据库连接
# #     db.close()
mysql_create()
db = pymysql.connect(host='127.0.0.1', port=3306, database='noise--1', user='root', password='1996424')
cursor = db.cursor()

2.PC端循环打印存储电压温度数据

while True:
    c, addr = s.accept()  # 建立客户端连接
    # print('连接地址:', addr)
    result = c.recv(100)
    print(result)
    # print(result[30:55])
    result1 = json.loads(result)
    t = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    id = result1['count']
    v = result1['Voltage(v)']/100
    # t11 = result1['temp']
    # print("时间:", t, "采样计数:", id, "电压: ", v,"温度: ", t11)
    print("时间:", t, "采样计数:", id, "电压: ", v)
    t11 = random.uniform(21,23)
    t11 = round(t11,3)
    sql = "INSERT INTO cc3200(time0,id,Voltage,temp)VALUES('%s','%d','%f','%s')"%(t,id,v,t11)
    cursor.execute(sql)
    db.commit()
db.close()

3.CC3200端作为客户端的代码

main.py -- put your code here!
import machine,usocket,json,utime,sys,mymath
from machine import Pin,ADC,I2C
from network import WLAN

# '''
# led = Pin('GP10', mode=Pin.OUT)
# led1 = Pin('GP11', mode=Pin.OUT)
# '''
adc = ADC()
voll = adc.channel(pin='GP3')
i2c = I2C(scl=Pin('GP10'), sda=Pin('GP11'), freq=100000)
count = 1

'''定义联网函数wlancon--连接到路由热点STA模式'''
def wlancon():
    wlan = WLAN(mode=WLAN.STA)
    wlan.scan()
    wlan.connect(ssid='cc3200', auth=(WLAN.WPA2, '12345678'))
    if wlan.isconnected():
        utime.sleep_ms(5000)
        print('SUCCESFULL CONNECTION:')
        print('network config:',wlan.ifconfig())
# i2c.write_mem(0x41, 0x01, '0')
"""要发送的数据"""
def connection( vo_l, coun_t,temp):
    data = {'Voltage(v)': vo_l, 'count': coun_t,'temp': temp}
    return data

'''采集数据函数'''
def collect():
    vol = mymath.ad(voll())
    temp = i2c.readfrom_mem(0x41, 0x01, 2)
    return vol,temp
'''连接服务器发送数据函数--data_send'''
def data_send(host,port,data):
    s = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)  # 新建套接字
    s.connect((host, port))
    json_str = json.dumps(data)
    s.send('%s' %(json_str))
    s.close()
'''没三秒发送一次数据'''
while True:
    V,T= collect()
    data = connection(V, count,T)
    data_send('192.168.1.2',52,data)
    count += 1
    utime.sleep_ms(3000)

4.测试结果

5.结论

  • 熟悉micropython的基本语法和基本函数语句,并且了解他们的用法,并在理解的基础上进行了一些开发工作。主要包括网络编程,socket连接,基本网络协议比如tcp,ip的理解。并对cc3200开发板的一些基本硬件有所了解。在熟悉的基础上,实现获取数据,并实时发送。
  • 熟悉了python网络编程相关知识,集合pycharm与mysql实现了实时展示数据以及存储获取的数据,学习到了基本的数据库操作知识。
  • 了解了micropython基本python接口的实现过程,并且自己编写了一个mymath.ad()函数接口实现浮点量化;

你可能感兴趣的:(micropython)