分类: Python技术

Python技术

Python中的*使用

Python中的*使用

Python中的*使用
在为函数传递参数和函数定义时使用参数的时候,时常会看到有和 *和**,下面分别讲解其作用。

调用函数时使用*和 **
假设有函数
def test(a, b, c)

test(*args):* 的作用其实就是把序列 args 中的每个元素,当作位置参数传进去。比如上面这个代码,如果 args 等于 (1,2,3) ,那么这个代码就等价于 test(1, 2, 3) 。

test(**kwargs):** 的作用则是把字典 kwargs 变成关键字参数传递。比如上面这个代码,如果 kwargs 等于 {‘a’:1,’b’:2,’c’:3} ,那这个代码就等价于 test(a=1,b=2,c=3) 。

定义函数参数时使用*和**

def test(*args):
定义函数参数时 * 的含义又要有所不同,在这里 *args 表示把传进来的位置参数都装在元组 args 里面。比如说上面这个函数,调用 test(1, 2, 3) 的话, args 的值就是 (1, 2, 3) 。:

def test(**kwargs):
类似的, ** 就是针对关键字参数和字典的了。 调用 test(a=1,b=2,c=3) 的话, kwargs 的值就是 {‘a’:1,’b’:2,’c’:3} 了。

Python类、模块、包的概念及区别

Python类、模块、包的概念及区别


类的概念在许多语言中出现,是面向对象编程的基础,很容易理解。抽象出不同物体的共同特征,根据相似性原则,把彼此相似的物体归于相同的类概念, 它将数据和操作进行封装,以便将来的复用。

模块
模块,在Python中一个文件就可以认为是一个模块。在创建了一个脚本文件后,定义了某些函数和变量。你在其他需要这些功能的文件中,导入这模块,就可重用这些函数和变量。模块名就是文件名去掉.py后缀。

模块也可以简单的划分为built-in模块和自定义模块

built-in 模块就是Python内置的一些模块,比如:sys, os等基本模块

 

内建函数dir()可以查看模块定义了什么数据(包括变量名,模块名,函数名等):dir(模块名),没有参数时返回所有当前定义的名字

模块搜索路径

当导入一个模块时,解释器先在当前包中查找模块,若找不到,然后在内置的built-in模块中查找,找不到则按sys.path给定的路径找对应的模块文件(模块名.py)


包是一个有层次的文件目录结构,它定义了由n个模块或n个子包组成的python应用程序执行环境。

通俗一点:包是一个包含__init__.py 文件的目录,该目录下一定得有这个__init__.py文件和其它模块或子包。

包可以使用import导入包,或者from + import来导入包中的部分模块。包目录下为首的一个文件便是 init.py。

子包: 假如子目录中也有 init.py 那么它就是这个包的子包了。

 

Python学习路线

零基础Python学习路线,小白的进阶之路!大佬带你起飞

近几年Python的受欢迎程度可谓是扶摇直上,当然了学习的人也是愈来愈多。一些学习Python的小白在学习初期,总希望能够得到一份Python学习路线图,小编经过多方汇总为大家汇总了一份Python学习路线图。

对于一个零基础的想学习python的朋友来说,学习方法很重要, 学习方法不对努力白费 一定要有一个正确的学习线路与方法

零基础Python学习路线,小白的进阶之路!

必学知识:【Linux基础】【Python基础语法】【Python字符串】【文件操作】【异常处理】【Python面向对象】【项目实战】

路线讲解:该路线循序渐进,科学合理,帮助学习者建立正确的编程思想,具备基本的编程能力;

必学知识:【Python平台迁移Linux】【Python常用第三方库】【Python高级语法】【Python正则表达式】【网路编程】【系统编程】【数据结构与算法】【项目实战】

路线讲解:该路线强调数据结构和算法的学习,着重提升学习者的编程核心能力;使学习者能够熟练掌握Python高级用法及网络相关知识,能够独立承担Python网络相关的开发;

必学知识:【HTML】【CSS】【JavaScript】【DOM】【事件】【jQuery】【混合开发】【项目实战】

路线讲解:使学习者掌握web前端开发的相关知识,在工作中搭建高质量网站;

必学知识:【Linux网站配置】【git项目管理】【Python框架Django】【flask框架】【接口开发】【数据库MySQL、MongoDB、Redis开发】

路线讲解:熟练掌握框架的使用,掌握数据库原理及相关优化;

必学知识:【爬虫开发原理】【requests+beautifulsoup4静态网页解析】【selenium动态网页解析】【scrapy框架】【分布式爬虫系统】【项目实战】

路线讲解:使学习者能够掌握爬虫的工作原理,独立承担爬虫的相关工作,亦能够独立设计及实现分布式爬虫框架;

必学知识:【数据分析】【数据可视化】【机器学习理论与实践】【TensorFlow图像实战】【项目实战Python人工智能项目】

路线讲解:理论与实践并重,加强理论的讲解,理解机器的学习原理,更加系统完善的了解整个Python学习流程。

以上就是整套Python学习路线图,这套学习路线图从学习者实际出发经过长时间的研究孕育而成,可以说适合每一位Python学习者。

python前景介绍

python前景介绍

2019年刚到来,作为一个学Python,使用Python的学生来说,这无疑是一个令人振奋的消息——Python编程语言获得了“年度编程语言”的称号! Python之所以获得这一称号,是因为与所有其他语言相比,它在2018年获得了*多的排名。Python语言获得了3.62%的优势,其次是VisualBasic.NET和Java。Python现在肯定已经成为大型编程语言的一部分。近20年来,C、C+和Java一直排在前3名,遥遥*于其他方面。Python现在加入了这3种语言。它是当今大学教学*频繁的*语言,在统计领域排名*,在人工智能编程中排名*,在脚本编写方面排名*,在编写系统测试方面排名*。除此之外,Python在网络编程和科学计算方面也处于*地位。 曾经,Python被称为网红语言。大数据时代的到来,Python进入了人们的视线;人工智能的兴起,Python再次受人关注。语法简单,代码优美,Python开始被广泛的学习。Python凭借着社区强大的第三方库,已经被广泛的应用到各个领域中去,Python是脚本语言,Python是人工智能首选语言,Python是全栈式开发语言。总之,Python无处不在。

Python来做物联网

使用Python来做物联网,就是这么easy!

%title插图%num

搭建整套物联网系统的方法有很多,*近四处捣鼓,使用python + 阿里云搭建一套*简单的物联系统,可以将单片机上的数据通过阿里云传输到PC端。 一、基本结构 先看架构图 框架.png 二、设备端接入 物联网终端是用的ESP32,是一款自带蓝牙和Wifi的单片机。利用它可以直接接入互联网,无需其他模块。当然你可以将现在流行的NB-Iot模块来联网,不过需要自己写一下驱动程序。我买的模块是支持micropython开发的,在淘宝上可以搜索到,用起来很方便。有时间我会补上这一块的初步教程。 ESP32模块.jpg Micropython是可以在低端硬件上运行的python,可以使用python语言直接操作IO 和MCU的外设比如UART、I2C等,用起来非常方便,不要搭建复杂的开发环境,也不需要学习寄存器配置。作为一个对传统MCU开发非常熟悉的硬件工程师来说,感觉操作起来非常简单。目前Micropython已经支持很多硬件了,应该用比较广泛的STM32部分系列也被支持。Micropython也已经支持很多常用的库,比如蓝牙,telnet,mqtt等。下面这个链接是micropython的中文论坛。 www.micropython.org.cn/bbs/forum.p… ESP32 通过wifi 接入互联网,使用mqtt协议接入阿里云,将温度数据上传至阿里云。在云端通过消息订阅可以直接查看温度信息。在PC端使用python调用MQTT协议,接入到阿里云。但是PC端和ESP32在阿里云上是两个不同的设备,需要通过阿里云来转发信息,这样PC就可以拿到ESP32上传的数据了。 ESP32 上的代码如下: from umqtt.simple import MQTTClient import usocket as socket import time import wifi

wifi.connect()

#Demo_01 ProductKey = “”#使用你自己的 ClientId = “1234|securemode=3,signmethod=hmacsha1|” DeviceName = “Demo_01” DeviceSecret = “**********************”#使用你自己的

strBroker = ProductKey + “.iot-as-mqtt.cn-shanghai.aliyuncs.com” Brokerport = 1883

user_name = “Demo_01&”#使用你自己的 user_password = “*************************************”#使用你自己的

print(“clientid:”,ClientId,” “,”Broker:”,strBroker,” “,”User Name:”,user_name,” “,”Password:”,user_password,” “)

def connect(): client = MQTTClient(client_id = ClientId,server= strBroker,port=Brokerport,user=user_name, password=user_password,keepalive=60) #please make sure keepalive value is not 0

有几点需要说明: 1.代码中的wifi.connect()函数需要自己编写,网上能搜到类似的,也可以打赏私信我所要源码。 2.阿里云物联网平台的接入需要进行三元组认证,会根据一定的规则生成登录名和密码,这个网上信息还是比较全面的。 3.向阿里云物联网平台发布消息的格式一定要按照代码中所写,网上很多代码,但是对这一块的描述都不清楚。 Micropython使用的umqtt.simple库,一定要设置keepalive时间,否则无法连接。这一点我是摸索了好久,*终通过查看库的源码才发现的问题。 三、云端设置 在云端建立一个高级产品,并创建两个设备,以供ESP32 和PC连接。 device.JPG 需要在产品中定义一下功能。 device_define.JPG 云端和设备端都建立好了之后,可以查看设备运行状态看到数据上传 云端数据查看.JPG 这是查看数据记录得到的结果 云端数据记录.JPG 当你看到正确的数据之后,就说明你的成功接入物联网并上传了数据。 接下来就是*重要的部分——设置是使用规则引擎来进行数据转发,将设备demo_01的数据转发到demo_02。这一步的语法很重要,虽然有官网有详细教程,但是当时还是搞了好久才完全正确。 规则查询语句: SELECT items.IndoorTemperature.value as IndoorTemperature FROM “/sys/use-your-productkey-here/Demo_01/thing/event/property/post” WHERE items.IndoorTemperature.value > 0 四、PC端接入 PC 端使用python模拟MQTT设备登陆阿里云订阅消息就行了,只要装好python很快就可以实现,网上也有很多代码。代码的很大一部分就是在做三元组认证,可以将这部分稍微修改一下来计算ESP32 登陆时所需的 PC端python代码如下: # coding=utf-8 import datetime import time import hmac import hashlib import math

try: import paho.mqtt.client as mqtt except ImportError: print(“MQTT client not find. Please install as follow:”) print(“pip install paho-mqtt”)

#Demo_02 ProductKey = “*********”#使用你自己的 ClientId = “2234” # 自定义clientId DeviceName = “Demo_02” DeviceSecret =”**********************************8″#使用你自己的

us = math.modf(time.time())[0] ms = int(round(us * 1000)) timestamp = str(ms)

def calculation_sign(signmethod): data = “”.join((“clientId”, ClientId, “deviceName”, DeviceName, “productKey”, ProductKey, “timestamp”, timestamp))

strBroker = ProductKey + “.iot-as-mqtt.cn-shanghai.aliyuncs.com” port = 1883

client_id = “”.join((ClientId, “|securemode=3”, “,signmethod=”, “hmacsha1”, “,timestamp=”, timestamp, “|”)) username = “”.join((DeviceName, “&”, ProductKey)) password = calculation_sign(“hmacsha1”)

print(“=”*60) print(strBroker) print(“client_id:”, client_id) print(“username:”, username) print(“password:”, password) print(“=”*60)

def on_connect(client, userdata, flags, rc): print(“OnConnetc, rc: ” + str(rc))

def on_publish(client, msg, rc): if rc == 0: print(“publish success, msg = ” + msg)

def on_subscribe(mqttc, obj, mid, granted_qos): print(“Subscribed: ” + str(mid) + ” ” + str(granted_qos))

def on_log(mqttc, obj, level, string): print(“Log:” + string)

def on_message(mqttc, obj, msg): curtime = datetime.datetime.now() strcurtime = curtime.strftime(“%Y-%m-%d %H:%M:%S”) print(strcurtime + “: ” + msg.topic + ” ” + str(msg.qos) + ” ” + str(msg.payload)) on_exec(str(msg.payload))

def on_exec(strcmd): print(“Exec:”, strcmd) strExec = strcmd

if name == ‘main’: mqttc = mqtt.Client(client_id) mqttc.username_pw_set(username, password) mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_publish = on_publish mqttc.on_subscribe = on_subscribe mqttc.on_log = on_log mqttc.connect(strBroker, port, 120) # mqttc.loop_start() time.sleep(1) temperature =27.55 mqttc.subscribe(“/sys/************/Demo_02/thing/service/property/set”, qos=1) # 换成自己的 #send_mseg = ‘{“pm_25″: %s,”area”:”%s”,”time”:”%s”}’ % (0, 0, datetime.datetime.now()) #send_mseg = ‘{“id”: “1234”, “version”: “1.0”,”params”: {“IndoorTemperature”: %s},”method”: “thing.event.property.post”}’%(temperature) send_mseg = ‘{“params”: {“IndoorTemperature”: %s},”method”: “thing.event.property.post”}’ % (temperature)

五、总结 工作之余了解了一下物联网的发展,看到有意思的东西打算学一下,刚好看到了microPython,震惊之余,决心做点小东西玩玩。 这套框架全部使用python实现,比我了解到的*大多数物联网方案要简单太多,虽然有些开发首先,但是用来实现一些简单设计应该是不成问题的,只要你会python,这套系统可以很快构建。当然python也是非常好学的,长期使用C语言的人根本不需要什么学习就可以上手。记住,你不是一个人在战斗。

Python如何实现微信自动回复

教你用Python如何实现微信自动回复功能,机器人自动对话!

托管机器人:用Python写一个机器人,自动回复别人说话

实现过程:

1.首先要申请一个可以说话的机器人.机器人网站http://www.tuling123.com

注册一个账号,然后登陆,创建一个机器人:

 

2.写一段连接机器人的程序.,首先获取机器人的api地址, http://www.tuling123.com/openapi/api,这个地址就是用来登陆机器人时找到秘钥使用的,所以下一步就是找秘钥,

 

这里需要些一段登陆机器人的代码:# coding = utf8 import requests import itchat # 去图灵机器人官网注册后会生成一个apikey,可在个人中心查看 KEY = ‘c220a31ae10d40f19a6cdce74997b3e6’ def get_response(msg):

apiUrl = ‘http://www.tuling123.com/openapi/api’    data = {        ‘key’   : KEY,        ‘info’   : msg,   # 这是要发送出去的信息        ‘userid’  : ‘wechat-rebot’,  #这里随意写点什么都行    }    try:        # 发送一个post请求        r = requests.post(apiUrl, data =data).json()        # 获取文本信息,若没有‘Text’ 值,将返回Nonoe         return r.get(‘text’)    except:        return# 通过定义装饰器加强函数 tuling_reply(msg) 功能,获取注册文本信息

3.获取别人微信发过来的信息,需要一个特殊的加强函数来完成.

# 通过定义装饰器加强函数 tuling_reply(msg) 功能,获取注册文本信息@itchat.msg_register(itchat.content.TEXT)

4.设置一个回复信息的机制,如果机器人出问题了,也就是不能回复信息了,设置一个默认的回复机制.

def tuling_reply(msg):    # 设置一个默认回复,在出现问题仍能正常回复信息    defaultReply = ‘I received: ‘ +msg[‘Text’]    reply = get_response(msg[‘Text’])    # a or b 表示,如有a有内容,那么返回a,否则返回b    return reply or defaultReply

5.以上所有的都准备好了,接下来就是要设置微信登陆了,通过生成二维码,微信扫描的方式登陆,开启程序.

# 使用热启动,不需要多次扫码itchat.auto_login(hotReload=True)itchat.run()

 

*终代码如下:

# coding = utf8

import requests

import itchat

# 去图灵机器人官网注册后会生成一个apikey,可在个人中心查看

KEY = ‘c220a31ae10d40f19a6cdce74997b3e6’

def get_response(msg)

:    # API的地址

apiUrl = ‘http://www.tuling123.com/openapi/api’

data = {

‘key’   : KEY,

‘info’   : msg,   # 这是要发送出去的信息

‘userid’  : ‘wechat-rebot’,  #这里随意写点什么都行

}

# 获取文本信息,若没有‘Text’ 值,将返回Nonoe

try:

# 发送一个post请求

r = requests.post(apiUrl, data =data).json()

return r.get(‘text’)

except:

return

# 通过定义装饰器加强函数 tuling_reply(msg) 功能,获取注册文本信息

@itchat.msg_register(itchat.content.TEXT)

def tuling_reply(msg):

# 设置一个默认回复,在出现问题仍能正常回复信息

defaultReply = ‘I received: ‘ +msg[‘Text’]

reply = get_response(msg[‘Text’])

# a or b 表示,如有a有内容,那么返回a,否则返回b

return reply or defaultReply

# 使用热启动,不需要多次扫码

itchat.auto_login(hotReload=True)

itchat.run()

用 Python 玩转 GitHub 的贡献板

基本原理前面已经讲过,我们只需要控制项目提交的日期和次数,就能在贡献面板中填充出花样来。可能有朋友会问,前面的部分怎么办?拿到我得等一年?No☝️,经过研究发现,GitHub的贡献面板是活得,什么意思呢?GitHub是根据项目的提交记录时时生成的贡献面板,所以只要在本地把时间改成过去,进行提交操作,再push到GitHub,就实现了穿越。了解了这些之后,就可以动手了。*后如果效果不尽人意或者像换个图样换个心情,只需要删了对应的仓库就行了。

坑1:码云不像GitHub,码云的贡献面板是一次性的,推上去之后就不会变,所以谨慎操作

程序设计
目标
1、设计一个模板,可以通过修改模板来改变图样
2、将过去时间的记录自动全部填充
3、每天进行自动COMMIT/PUSH操作
实现
1、模板设计成一个json二维数组,由0和1组成,分别到表有/无提交记录。行数*好固定是7(周一到周日),列数可以自已随意设置。下面是基于python的实现。
model.json

[
[0, 1, 1, 0, 0, 0, 1, 1, 0, 0],
[1, 1, 1, 1, 0, 1, 1, 1, 1, 0],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 1, 1, 1, 1, 1, 0, 0, 0],
[0, 0, 0, 1, 1, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
]

下面的代码是根据当前日期和模板对应的值来进行提交,用于定时任务每天执行。可以直接部署到服务器,通过后面的命令设置定时任务。
main.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import json
import os
import time
import datetime

def calculate_date(start, end):
# 计算日期相差天数
start_sec = time.mktime(time.strptime(start, ‘%Y-%m-%d’))
end_sec = time.mktime(time.strptime(end, ‘%Y-%m-%d’))

days = int((end_sec – start_sec) / (24 * 60 * 60))

return days

def commit(flag):
if flag:
for n in range(49):  # 设置commit次数
with open(‘./record.txt’, ‘a’) as record:
record.write(‘.’)
record.close()
os.system(‘git commit -a -m \”HeartBeat\”‘)

else:  # 每天推一条
with open(‘./record.txt’, ‘a’) as record:
record.write(‘.’)
record.close()
os.system(‘git commit -a -m \”HeartBeat\”‘)

os.system(‘git pull && git push origin master’)

with open(‘./model.json’) as f:  # 加载模型
PATTEN = json.loads(f.read())
f.close()

PERIOD = len(PATTEN[0])  # 周期(图案列数)

START_DATE = ‘2017-7-16’  # 开始日期,很重要,左上角提一格的日期,自己手动修改
now = datetime.datetime.now().strftime(‘%Y-%m-%d’)

row = calculate_date(START_DATE, now) % 7
col = int(calculate_date(START_DATE, now) / 7) % PERIOD

commit(PATTEN[row][col])

开启定时任务

crontab -e
#  输入以下代码,前两个参数分别是分钟和小时,该任务为每天12:00定时执行
# 00 12 * * * cd /home/git_heart && git pull && /usr/bin/python main.py

2、定时任务只能帮我完成今天及以后的事情,之前的也需要写个脚本跑一下。
loop.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import json
import os
import time
import datetime

def calculate_date(start, end):
# 计算日期相差天数
start_sec = time.mktime(time.strptime(start, ‘%Y-%m-%d’))
end_sec = time.mktime(time.strptime(end, ‘%Y-%m-%d’))

days = int((end_sec – start_sec) / (24 * 60 * 60))

return days

def add_days(d, num):
# 日期递增
sec = num * 24 * 60 * 60
now_sec = time.mktime(time.strptime(d, ‘%Y-%m-%d’)) + sec
return time.strftime(“%Y-%m-%d”, time.localtime(now_sec))

def commit(flag):
if flag:
for n in range(49):
with open(‘./record.txt’, ‘a’) as record:
record.write(‘.’)
record.close()
os.system(‘git commit -a -m \”HeartBeat\”‘)

with open(‘./record.txt’, ‘a’) as record:
record.write(‘\n’)
record.close()
os.system(‘git commit -a -m \”HeartBeat\”‘)

else:
with open(‘./record.txt’, ‘a’) as record:
record.write(now + ‘\n’)
record.close()
os.system(‘git commit -a -m \”HeartBeat\”‘)

with open(‘./model.json’) as f:  # 加载模型
PATTEN = json.loads(f.read())
f.close()

PERIOD = len(PATTEN[0])  # 周期(图案列数)

START_DATE = ‘2017-7-16’  # 开始日期, 码云和git显示不一样, 建议从*左上角开始
now = datetime.datetime.now().strftime(‘%Y-%m-%d’)

os.system(‘timedatectl set-ntp false’) # 关闭时间自动同步

while calculate_date(START_DATE, now) >= 0:
row = calculate_date(START_DATE, now) % 7
col = int(calculate_date(START_DATE, now) / 7) % PERIOD
commit(PATTEN[row][col])

now = add_days(now, -1)
os.system(‘timedatectl set-time ‘ + now)

#  复原时间
os.system(‘timedatectl set-ntp 1 && timedatectl set-local-rtc 1’)

到这里基本就结束了,第三个目标实际上在*步就已经完成了,下面上一下测试结果。

效果展示
1、小心心

[
[0, 1, 1, 0, 0, 0, 1, 1, 0, 0],
[1, 1, 1, 1, 0, 1, 1, 1, 1, 0],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 1, 1, 1, 1, 1, 0, 0, 0],
[0, 0, 0, 1, 1, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
]\%title插图%num

2、X

[
[0, 0, 0, 0, 0],
[1, 0, 0, 0, 1],
[0, 1, 0, 1, 0],
[0, 0, 1, 0, 0],
[0, 1, 0, 1, 0],
[1, 0, 0, 0, 1],
[0, 0, 0, 0, 0]
]

%title插图%num

使用Python来做物联网

使用Python来做物联网,就是这么easy!

%title插图%num

搭建整套物联网系统的方法有很多,*近四处捣鼓,使用python + 阿里云搭建一套*简单的物联系统,可以将单片机上的数据通过阿里云传输到PC端。 一、基本结构 先看架构图 框架.png 二、设备端接入 物联网终端是用的ESP32,是一款自带蓝牙和Wifi的单片机。利用它可以直接接入互联网,无需其他模块。当然你可以将现在流行的NB-Iot模块来联网,不过需要自己写一下驱动程序。我买的模块是支持micropython开发的,在淘宝上可以搜索到,用起来很方便。有时间我会补上这一块的初步教程。 ESP32模块.jpg Micropython是可以在低端硬件上运行的python,可以使用python语言直接操作IO 和MCU的外设比如UART、I2C等,用起来非常方便,不要搭建复杂的开发环境,也不需要学习寄存器配置。作为一个对传统MCU开发非常熟悉的硬件工程师来说,感觉操作起来非常简单。目前Micropython已经支持很多硬件了,应该用比较广泛的STM32部分系列也被支持。Micropython也已经支持很多常用的库,比如蓝牙,telnet,mqtt等。下面这个链接是micropython的中文论坛。 www.micropython.org.cn/bbs/forum.p… ESP32 通过wifi 接入互联网,使用mqtt协议接入阿里云,将温度数据上传至阿里云。在云端通过消息订阅可以直接查看温度信息。在PC端使用python调用MQTT协议,接入到阿里云。但是PC端和ESP32在阿里云上是两个不同的设备,需要通过阿里云来转发信息,这样PC就可以拿到ESP32上传的数据了。 ESP32 上的代码如下: from umqtt.simple import MQTTClient import usocket as socket import time import wifi

wifi.connect()

#Demo_01 ProductKey = “”#使用你自己的 ClientId = “1234|securemode=3,signmethod=hmacsha1|” DeviceName = “Demo_01” DeviceSecret = “**********************”#使用你自己的

strBroker = ProductKey + “.iot-as-mqtt.cn-shanghai.aliyuncs.com” Brokerport = 1883

user_name = “Demo_01&”#使用你自己的 user_password = “*************************************”#使用你自己的

print(“clientid:”,ClientId,” “,”Broker:”,strBroker,” “,”User Name:”,user_name,” “,”Password:”,user_password,” “)

def connect(): client = MQTTClient(client_id = ClientId,server= strBroker,port=Brokerport,user=user_name, password=user_password,keepalive=60) #please make sure keepalive value is not 0

有几点需要说明: 1.代码中的wifi.connect()函数需要自己编写,网上能搜到类似的,也可以打赏私信我所要源码。 2.阿里云物联网平台的接入需要进行三元组认证,会根据一定的规则生成登录名和密码,这个网上信息还是比较全面的。 3.向阿里云物联网平台发布消息的格式一定要按照代码中所写,网上很多代码,但是对这一块的描述都不清楚。 Micropython使用的umqtt.simple库,一定要设置keepalive时间,否则无法连接。这一点我是摸索了好久,*终通过查看库的源码才发现的问题。 三、云端设置 在云端建立一个高级产品,并创建两个设备,以供ESP32 和PC连接。 device.JPG 需要在产品中定义一下功能。 device_define.JPG 云端和设备端都建立好了之后,可以查看设备运行状态看到数据上传 云端数据查看.JPG 这是查看数据记录得到的结果 云端数据记录.JPG 当你看到正确的数据之后,就说明你的成功接入物联网并上传了数据。 接下来就是*重要的部分——设置是使用规则引擎来进行数据转发,将设备demo_01的数据转发到demo_02。这一步的语法很重要,虽然有官网有详细教程,但是当时还是搞了好久才完全正确。 规则查询语句: SELECT items.IndoorTemperature.value as IndoorTemperature FROM “/sys/use-your-productkey-here/Demo_01/thing/event/property/post” WHERE items.IndoorTemperature.value > 0 四、PC端接入 PC 端使用python模拟MQTT设备登陆阿里云订阅消息就行了,只要装好python很快就可以实现,网上也有很多代码。代码的很大一部分就是在做三元组认证,可以将这部分稍微修改一下来计算ESP32 登陆时所需的 PC端python代码如下: # coding=utf-8 import datetime import time import hmac import hashlib import math

try: import paho.mqtt.client as mqtt except ImportError: print(“MQTT client not find. Please install as follow:”) print(“pip install paho-mqtt”)

#Demo_02 ProductKey = “*********”#使用你自己的 ClientId = “2234” # 自定义clientId DeviceName = “Demo_02” DeviceSecret =”**********************************8″#使用你自己的

us = math.modf(time.time())[0] ms = int(round(us * 1000)) timestamp = str(ms)

def calculation_sign(signmethod): data = “”.join((“clientId”, ClientId, “deviceName”, DeviceName, “productKey”, ProductKey, “timestamp”, timestamp))

strBroker = ProductKey + “.iot-as-mqtt.cn-shanghai.aliyuncs.com” port = 1883

client_id = “”.join((ClientId, “|securemode=3”, “,signmethod=”, “hmacsha1”, “,timestamp=”, timestamp, “|”)) username = “”.join((DeviceName, “&”, ProductKey)) password = calculation_sign(“hmacsha1”)

print(“=”*60) print(strBroker) print(“client_id:”, client_id) print(“username:”, username) print(“password:”, password) print(“=”*60)

def on_connect(client, userdata, flags, rc): print(“OnConnetc, rc: ” + str(rc))

def on_publish(client, msg, rc): if rc == 0: print(“publish success, msg = ” + msg)

def on_subscribe(mqttc, obj, mid, granted_qos): print(“Subscribed: ” + str(mid) + ” ” + str(granted_qos))

def on_log(mqttc, obj, level, string): print(“Log:” + string)

def on_message(mqttc, obj, msg): curtime = datetime.datetime.now() strcurtime = curtime.strftime(“%Y-%m-%d %H:%M:%S”) print(strcurtime + “: ” + msg.topic + ” ” + str(msg.qos) + ” ” + str(msg.payload)) on_exec(str(msg.payload))

def on_exec(strcmd): print(“Exec:”, strcmd) strExec = strcmd

if name == ‘main’: mqttc = mqtt.Client(client_id) mqttc.username_pw_set(username, password) mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_publish = on_publish mqttc.on_subscribe = on_subscribe mqttc.on_log = on_log mqttc.connect(strBroker, port, 120) # mqttc.loop_start() time.sleep(1) temperature =27.55 mqttc.subscribe(“/sys/************/Demo_02/thing/service/property/set”, qos=1) # 换成自己的 #send_mseg = ‘{“pm_25″: %s,”area”:”%s”,”time”:”%s”}’ % (0, 0, datetime.datetime.now()) #send_mseg = ‘{“id”: “1234”, “version”: “1.0”,”params”: {“IndoorTemperature”: %s},”method”: “thing.event.property.post”}’%(temperature) send_mseg = ‘{“params”: {“IndoorTemperature”: %s},”method”: “thing.event.property.post”}’ % (temperature)

五、总结 工作之余了解了一下物联网的发展,看到有意思的东西打算学一下,刚好看到了microPython,震惊之余,决心做点小东西玩玩。 这套框架全部使用python实现,比我了解到的*大多数物联网方案要简单太多,虽然有些开发首先,但是用来实现一些简单设计应该是不成问题的,只要你会python,这套系统可以很快构建。当然python也是非常好学的,长期使用C语言的人根本不需要什么学习就可以上手。

如何快速入门Python

如何快速入门Python

学习任何一门语言都是从入门(1年左右),通过不间断练习达到熟练水准(3到5年),少数人*终能精通语言,成为执牛耳者,他们是金字塔的*顶层。虽然万事开头难,但好的开始是成功的一半,今天这篇文章就来谈谈如何开始入门 Python。只要方向对了,就不怕路远。

设定目标

当你决定入门 Python 时,需要一个清晰且短期内可实现的目标,比如通过学习找一份初级程序员工作,目标明确后,你需要了解企业对初级程序员有哪些技能要求,下面是我从拉勾网找的一个初级 Python 工程师的任职要求:

做 Python 开发除了熟悉语言本身之外,还需要掌握很多相关联的技能,好比打NBA,你不光要学如何投篮,还要练习力量、技战术等一整套东西。所以,一个普通 Python Web 开发工程师需要掌握的技能包括至少一个Web框架,比如:Django、Flask、Tornado,做业务系统离不开数据库的支撑,另外,还需要对Linux系统的基本操作和常用命令有所了解,因为以后你写到程序基本上都会运行在Linux平台上。

接下来我从这几个方面逐一介绍

Python3?

不少新手总是纠结是学 Python2 还是 Python3,就像手里同时有包子和馒头,不知道先吃哪个,这种纠结完全就是徒增烦恼,因为它们是同一种语言,只有少部分地方语法不兼容,尽管目前大部分公司还在用 Python2,但是 Python3 逐渐成为主流已是不争事实,毕竟后者性能方面更占有优势,官方也在力推Python3。所以毫不犹豫地选择 Python3 吧,*多花一天的时间能把 Python2 中特有的内容搞懂。

开发工具

工欲善其事必先利其器,做 Python 开发的 IDE(编辑器)层出不穷,我只推荐 Pycharm 和 Sublime,两个工具都可以免费使用,而且它们的学习成本非常低,网上找一篇教程看了基本就能上手,Vim、Emacs 这样的远古神器还是放以后再去了解吧。另外,今后你所遇到的 90% 的问题都有可能通过Google和StackOverflow来解决。

学习资源

网上入门资源琳琅满目,一本好书能为你指点迷津。快速了解 Python 可以看一下 Learn Python in Y minutes 这篇文章。但千万不要被标题所迷惑,一门语言不可能几分钟就能学会,看完之后应该会对Python 有个初步的印象,照着示例操作完之后,你就要选择一本合适入门的教程,《A Byte of Python》是一本值得推荐的书籍,来说说我推荐这本书的理由。

《A Byte of Python》的中文名叫《简明 Python 教程》,这本书的*新版已经是第10版,基于 Python3.5,所以不担心是否知识落后的问题,其次,这本书的厚度152页非常适合入门,涵盖了 Python 入门所有内容,相对那些五六百页的大部头书来说非常精简了,2个星期能啃完。

这本书看完之后,你应该能设计出简单程序出来。再推荐一本书《Python学习手册》作为进阶学习,内容相对要更深入,适合有一定编程基础的人阅读。

做Web开发,HTML、JS、CSS 是必须有所了解的,作为前端技能,不一定要深入了解,做到能写基本的HTML代码就够了,此外,你还需要了解 HTTP 协议(推荐《图解HTTP协议》)。目前比较主流的Web框架有 Django、Flask、Tornado,各自都有各自的特点,Django 文档丰富、Flask 短小精悍、Tornado 异步并发。这里推荐使用 Flask,推荐书目《Flask Web开发:基于Python的Web应用开发实战》

Linux 推荐《快乐的 Linux 命令行》,同样是一本非常经典的入门迷你书,没有太多理论,范围也不太宽

MySQL只推荐一本《MySQL必知必会》,不到250页的小册子,实践性很强,没有什么艰深晦涩的理论堆砌,看完这本书基本入门数据库了。

*后

只看书不会进步,思考和实践才有成长,自学编程是一个比较枯燥的过程,如果没有正向反馈,学习的积*性很容易被打压下来,所以你应该积*参与到相关的技术圈子中去,尝试去解答力所能及的新手问题,向圈子中的大牛们寻求帮助,善于总结自己所学到的东西,分享给更多的人

python类中函数调用

#类及函数的定义
Class A:
#构造函数:
def __init__(self,var1,var2):
self.var1 = var1
self.var2 = var2

def b(self,var1,var2):
return var1+var2

#类内函数调用:
var1=1
var2=2
#创建对象:
a = A(var1,var2);
#调用函数:
a.b(var1,var2)
首先每个类的构造函数名称相同(__init__(self[,形参表])),用于初始化成员变量。

调用类内函数,首先构造对象,然后用‘.’(点)调用。

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速