Python 物联网(IoT)与边缘计算开发实战(1)

Python 在物联网(IoT)中的应用 综上所述,Python 作为一门高效、灵活的语言,在物联网领域的应用前景十分广阔。无论是小型个人项目还是大型企业级解决方案,Python 都能发挥重要作用。未来,随着更多创新技术的涌现,我们有理由相信 Python 将继续引领 IoT 行业的发展潮流。``` 阅读详情

Python 物联网(IoT)与边缘计算开发实战
https://www.python.org/static/community_logos/python-logo-master-v3-TM.png

物联网基础与硬件交互
Raspberry Pi GPIO控制
python
import RPi.GPIO as GPIO
import time

# 设置GPIO模式
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

# 定义引脚
LED_PIN = 17
BUTTON_PIN = 18

# 初始化引脚
GPIO.setup(LED_PIN, GPIO.OUT)
GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)

def blink_led(times, speed=0.5):
    """LED闪烁效果"""
    for _ in range(times):
        GPIO.output(LED_PIN, GPIO.HIGH)
        time.sleep(speed)
        GPIO.output(LED_PIN, GPIO.LOW)
        time.sleep(speed)

try:
    print("按下按钮控制LED (Ctrl+C退出)")
    while True:
        if GPIO.input(BUTTON_PIN) == GPIO.LOW:
            print("按钮按下 - LED闪烁")
            blink_led(3, 0.3)
            time.sleep(0.5)  # 防抖延迟
finally:
    GPIO.cleanup()  # 清理GPIO设置
https://www.raspberrypi.com/documentation/computers/images/GPIO-Pinout-Diagram-2.png

传感器数据采集
python
import Adafruit_DHT
import time

# 设置传感器类型和引脚
DHT_SENSOR = Adafruit_DHT.DHT22
DHT_PIN = 4

def read_sensor():
    """读取温湿度传感器数据"""
    humidity, temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)
    if humidity is not None and temperature is not None:
        return {
            'temperature': round(temperature, 1),
            'humidity': round(humidity, 1),
            'timestamp': time.strftime('%Y-%m-%d %H:%M:%S')
        }
    else:
        print("传感器读取失败!")
        return None

# 每5秒读取一次数据
while True:
    sensor_data = read_sensor()
    if sensor_data:
        print(f"温度: {sensor_data['temperature']}°C, 湿度: {sensor_data['humidity']}%")
    time.sleep(5)
物联网通信协议
MQTT协议实现
python
import paho.mqtt.client as mqtt
import json
import time

# MQTT配置
MQTT_BROKER = "broker.example.com"
MQTT_PORT = 1883
MQTT_TOPIC_PUB = "sensor/data"
MQTT_TOPIC_SUB = "sensor/control"
CLIENT_ID = "python-iot-client"

# 传感器模拟数据
def get_sensor_data():
    return {
        "device_id": CLIENT_ID,
        "temperature": 25.5 + (time.time() % 3),
        "humidity": 50 + (time.time() % 10),
        "timestamp": int(time.time())
    }

# 连接回调
def on_connect(client, userdata, flags, rc):
    print(f"连接MQTT服务器,返回码: {rc}")
    client.subscribe(MQTT_TOPIC_SUB)

# 消息接收回调
def on_message(client, userdata, msg):
    payload = msg.payload.decode()
    print(f"收到消息 [{msg.topic}]: {payload}")
    
    try:
        command = json.loads(payload)
        if command.get('action') == 'reboot':
            print("执行重启指令...")
            # 这里添加重启逻辑

    except json.JSONDecodeError:
        print("无效的JSON消息")

# 创建MQTT客户端
client = mqtt.Client(CLIENT_ID)
client.on_connect = on_connect
client.on_message = on_message

# 连接并启动循环
client.connect(MQTT_BROKER, MQTT_PORT, 60)
client.loop_start()

try:
    while True:
        # 发布传感器数据
        sensor_data = get_sensor_data()
        client.publish(MQTT_TOPIC_PUB, json.dumps(sensor_data))
        print(f"发布数据: {sensor_data}")
        time.sleep(10)
except KeyboardInterrupt:
    print("断开连接...")
    client.loop_stop()
    client.disconnect()
https://mqtt.org/assets/img/mqtt-publish-subscribe.png

CoAP协议实现
python
from aiocoap import *
import asyncio
import time

async def coap_server():
    """CoAP服务器实现"""
    protocol = await Context.create_server_context(CoAPServer())

    # 持续运行
    print("CoAP服务器启动...")
    await asyncio.get_running_loop().create_future()

class CoAPServer(Resource):
    """CoAP资源处理"""
    
    def __init__(self):
        super().__init__()
        self.sensor_data = {
            "temperature": 25.0,
            "humidity": 50.0
        }
    
    async def render_get(self, request):
        """处理GET请求"""
        self.update_sensor_data()
        payload = json.dumps(self.sensor_data).encode('utf-8')
        return Message(payload=payload)
    
    async def render_post(self, request):
        """处理POST请求"""
        try:
            payload = json.loads(request.payload.decode('utf-8'))
            if 'set_temp' in payload:
                self.sensor_data['temperature'] = payload['set_temp']
            if 'set_humidity' in payload:
                self.sensor_data['humidity'] = payload['set_humidity']
            
            return Message(code=CHANGED, 
                         payload=b"Settings updated")
        except:
            return Message(code=BAD_REQUEST, 
                         payload=b"Invalid request")

    def update_sensor_data(self):
        """更新传感器数据(模拟)"""
        self.sensor_data = {
            "temperature": 25.0 + (time.time() % 3),
            "humidity": 50.0 + (time.time() % 10),
            "timestamp": int(time.time())
        }

async def coap_client():
    """CoAP客户端实现"""
    protocol = await Context.create_client_context()
    
    # 获取数据
    request = Message(code=GET, uri='coap://localhost/sensor')
    try:
        response = await protocol.request(request).response
        print(f"收到响应: {response.payload.decode()}")
    except Exception as e:
        print(f"请求失败: {e}")
    
    # 设置数据
    payload = {"set_temp": 26.5, "set_humidity": 55.0}
    request = Message(code=POST, 
                     payload=json.dumps(payload).encode(),
                     uri='coap://localhost/sensor')
    try:
        response = await protocol.request(request).response
        print(f"设置响应: {response.payload.decode()}")
    except Exception as e:
        print(f"设置失败: {e}")

# 运行示例
async def main():
    server_task = asyncio.create_task(coap_server())
    await asyncio.sleep(1)  # 等待服务器启动
    await coap_client()
    server_task.cancel()

asyncio.run(main())
边缘计算框架
使用MicroPython
python
# ESP32 MicroPython示例
import machine
import network
import urequests
import ujson
from time import sleep

# 配置WiFi
WIFI_SSID = "your_wifi"
WIFI_PASS = "your_password"

def connect_wifi():
    sta_if = network.WLAN(network.STA_IF)
    if not sta_if.isconnected():
        print("连接WiFi...")
        sta_if.active(True)
        sta_if.connect(WIFI_SSID, WIFI_PASS)
        while not sta_if.isconnected():
            pass
    print("网络配置:", sta_if.ifconfig())

# 读取传感器(模拟)
def read_sensor():
    return {
        "temp": 25 + machine.rng() % 5,
        "humidity": 50 + machine.rng() % 10
    }

# 边缘计算处理
def process_data(data):
    # 简单异常检测
    if data['temp'] > 30 or data['humidity'] > 80:
        data['alert'] = True
    else:
        data['alert'] = False
    return data

# 主循环
connect_wifi()
while True:
    sensor_data = read_sensor()
    processed_data = process_data(sensor_data)
    
    if processed_data['alert']:
        print("警报状态! 发送数据...")
        response = urequests.post(
            "api.example.com/alerts",
            json=processed_data,
            headers={'Content-Type': 'application/json'}
        )
        print("响应:", response.text)
        response.close()
    
    sleep(60)  # 每分钟检查一次
使用EdgeX Foundry
python
import requests
import json
import time

# EdgeX配置
EDGEX_URL = "localhost:48080/api/v1"
DEVICE_NAME = "temperature-sensor"

def register_device():
    """注册设备到EdgeX"""
    device = {
        "name": DEVICE_NAME,
        "description": "Python IoT温度传感器",
        "adminState": "UNLOCKED",
        "operatingState": "ENABLED",
        "protocols": {
            "other": {
                "Address": "virtual01",
                "Protocol": "300"
            }
        }
    }
    
    response = requests.post(
        f"{EDGEX_URL}/device",
        json=device,
        headers={"Content-Type": "application/json"}
    )
    return response.json()

def send_reading(value):
    """发送传感器读数"""
    reading = {
        "device": DEVICE_NAME,
        "readings": [
            {
                "name": "Temperature",
                "value": str(value)
            }
        ]
    }
    
    response = requests.post(
        f"{EDGEX_URL}/reading",
        json=reading,
        headers={"Content-Type": "application/json"}
    )
    return response.status_code == 200

# 模拟设备运行
print("注册设备...")
register_device()

print("开始发送传感器数据...")
while True:
    temp = 20 + (time.time() % 10)  # 模拟温度波动
    if send_reading(temp):
        print(f"发送温度数据: {temp}°C")
    else:
        print("发送数据失败")
    time.sleep(5)
https://docs.edgexfoundry.org/1.3/_images/EdgeX_arch.png

物联网数据处理
实时数据流处理
python
import pyarrow.flight as flight
import pandas as pd
import numpy as np

class FlightServer(flight.FlightServerBase):
    """Arrow Flight服务器实现"""
    
    def __init__(self, location):
        super().__init__(location)
        self.data = pd.DataFrame({
            'timestamp': pd.date_range('2023-01-01', periods=100, freq='s'),
            'value': np.random.randn(100)
        })
    
    def do_get(self, context, ticket):
        """处理数据获取请求"""
        df = self.data[self.data['timestamp'] > pd.Timestamp.now() - pd.Timedelta('1min')]
        table = pa.Table.from_pandas(df)
        return flight.RecordBatchStream(table)

class DataProcessor:
    """实时数据处理"""
    
    def __init__(self, server_url):
        self.client = flight.FlightClient(server_url)
    
    def process_stream(self):
        """处理实时数据流"""
        while True:
            try:
                # 获取最近1分钟数据
                descriptor = flight.FlightDescriptor.for_command(b"latest_data")
                flight_info = self.client.get_flight_info(descriptor)
                
                for endpoint in flight_info.endpoints:
                    for location in endpoint.locations:
                        reader = self.client.do_get(location.ticket)
                        batch = reader.read_all()
                        df = batch.to_pandas()
                        
                        # 实时分析
                        if not df.empty:
                            avg = df['value'].mean()
                            max_val = df['value'].max()
                            print(f"平均值: {avg:.2f}, 最大值: {max_val:.2f}")
            
            except Exception as e:
                print(f"处理错误: {e}")
            
            time.sleep(10)

# 启动服务器
server = FlightServer("grpc://0.0.0.0:8815")
server_thread = threading.Thread(target=server.serve)
server_thread.start()

# 启动客户端处理
processor = DataProcessor("grpc://localhost:8815")
processor.process_stream()
时序数据库集成
python
import influxdb_client
from influxdb_client.client.write_api import SYNCHRONOUS

class InfluxDBManager:
    """InfluxDB时序数据库管理"""
    
    def __init__(self, url, token, org, bucket):
        self.client = influxdb_client.InfluxDBClient(
            url=url,
            token=token,
            org=org
        )
        self.bucket = bucket
        self.write_api = self.client.write_api(write_options=SYNCHRONOUS)
        self.query_api = self.client.query_api()
    
    def write_data(self, measurement, tags, fields):
        """写入数据点"""
        point = influxdb_client.Point(measurement)
        
        # 添加标签
        for tag_key, tag_value in tags.items():
            point.tag(tag_key, tag_value)
        
        # 添加字段
        for field_key, field_value in fields.items():
            point.field(field_key, field_value)
        
        # 写入数据库
        self.write_api.write(bucket=self.bucket, record=point)
    
    def query_data(self, query):
        """查询数据"""
        result = self.query_api.query(query)
        records = []
        
        for table in result:
            for record in table.records:
                records.append({
                    'time': record.get_time(),
                    'measurement': record.get_measurement(),
                    **record.values
                })
        
        return records

# 使用示例
influx_mgr = InfluxDBManager(
    url="localhost:8086",
    token="your-token",
    org="your-org",
    bucket="iot-data"
)

# 写入传感器数据
influx_mgr.write_data(
    measurement="temperature",
    tags={"location": "room1", "device": "sensor1"},
    fields={"value": 25.3}
)

# 查询最近1小时数据
query = """
from(bucket: "iot-data")
  |> range(start: -1h)
  |> filter(fn: (r) => r._measurement == "temperature")
"""
data = influx_mgr.query_data(query)
print("查询结果:", data)
物联网安全
设备认证与加密
python
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.kdf.hkdf import HKDF
from cryptography.hazmat.backends import default_backend
import os

class IoTDeviceSecurity:
    """物联网设备安全类"""
    
    def __init__(self):
        # 生成ECDSA密钥对
        self.private_key = ec.generate_private_key(
            ec.SECP256R1(), default_backend()
        )
        self.public_key = self.private_key.public_key()
        
        # 预共享密钥(实际应用中应从安全存储获取)
        self.shared_secret = os.urandom(32)
    
    def get_public_key_pem(self):
        """获取PEM格式的公钥"""
        return self.public_key.public_bytes(
            encoding=serialization.Encoding.PEM,
            format=serialization.PublicFormat.SubjectPublicKeyInfo
        )
    
    def sign_data(self, data):
        """签名数据"""
        if isinstance(data, str):
            data = data.encode('utf-8')
        
        signature = self.private_key.sign(
            data,
            ec.ECDSA(hashes.SHA256())
        )
        return signature
    
    def verify_signature(self, public_key_pem, data, signature):
        """验证签名"""
        public_key = serialization.load_pem_public_key(
            public_key_pem,
            backend=default_backend()
        )
        
        if isinstance(data, str):
            data = data.encode('utf-8')
        
        try:
            public_key.verify(
                signature,
                data,
                ec.ECDSA(hashes.SHA256())
            )
            return True
        except:
            return False
    
    def derive_session_key(self, peer_public_key_pem):
        """派生会话密钥"""
        peer_public_key = serialization.load_pem_public_key(
            peer_public_key_pem,
            backend=default_backend()
        )
        
        shared_key = self.private_key.exchange(
            ec.ECDH(), peer_public_key
        )
        
        # 使用HKDF派生密钥
        derived_key = HKDF(
            algorithm=hashes.SHA256(),
            length=32,
            salt=None,
            info=b'session-key',
            backend=default_backend()
        ).derive(shared_key)
        
        return derived_key

# 使用示例
device1 = IoTDeviceSecurity()
device2 = IoTDeviceSecurity()

# 交换公钥
device1_pubkey = device1.get_public_key_pem()
device2_pubkey = device2.get_public_key_pem()

# 派生会话密钥
session_key1 = device1.derive_session_key(device2_pubkey)
session_key2 = device2.derive_session_key(device1_pubkey)

print("会话密钥匹配:", session_key1 == session_key2)
安全固件更新
python
import hashlib
import hmac
import requests
import tempfile
import subprocess

class SecureFirmwareUpdater:
    """安全固件更新"""
    
    def __init__(self, device_id, secret_key, update_server):
        self.device_id = device_id
        self.secret_key = secret_key.encode('utf-8')
        self.update_server = update_server
    
    def check_update(self):
        """检查更新"""
        # 创建认证签名
        nonce = os.urandom(16).hex()
        message = f"{self.device_id}:{nonce}".encode('utf-8')
        signature = hmac.new(
            self.secret_key, 
            message, 
            hashlib.sha256
        ).hexdigest()
        
        # 发送认证请求
        response = requests.get(
            f"{self.update_server}/check-update",
            headers={
                "Device-ID": self.device_id,
                "Nonce": nonce,
                "Signature": signature
            }
        )
        
        if response.status_code == 200:
            return response.json()
        else:
            print(f"检查更新失败: {response.text}")
            return None
    
    def download_firmware(self, version, checksum):
        """下载固件"""
        # 创建临时文件
        temp_file = tempfile.NamedTemporaryFile(delete=False)
        
        try:
            # 流式下载固件
            response = requests.get(
                f"{self.update_server}/firmware/{version}",
                stream=True
            )
            
            # 计算下载文件的哈希
            sha256 = hashlib.sha256()
            
            for chunk in response.iter_content(chunk_size=8192):
                temp_file.write(chunk)
                sha256.update(chunk)
            
            temp_file.close()
            
            # 验证校验和
            if sha256.hexdigest() != checksum:
                os.unlink(temp_file.name)
                raise ValueError("固件校验和不匹配")
            
            return temp_file.name
        except:
            os.unlink(temp_file.name)
            raise
    
    def apply_update(self, firmware_path):
        """应用更新"""
        # 验证固件签名(示例)
        if not self.verify_firmware(firmware_path):
            raise ValueError("固件签名验证失败")
        
        # 执行更新脚本(实际实现依平台而定)
        result = subprocess.run(
            ["/bin/sh", firmware_path],
            capture_output=True,
            text=True
        )
        
        if result.returncode != 0:
            print(f"更新失败: {result.stderr}")
            return False
        
        print("固件更新成功!")
        return True
    
    def verify_firmware(self, firmware_path):
        """验证固件签名"""
        # 这里应实现实际的签名验证逻辑
        # 示例中仅检查文件大小
        return os.path.getsize(firmware_path) > 0

# 使用示例
updater = SecureFirmwareUpdater(
    device_id="device-123",
    secret_key="your-secret-key",
    update_server="firmware.example.com"
)

update_info = updater.check_update()
if update_info and update_info['available']:
    print(f"发现新版本: {update_info['version']}")
    try:
        firmware_path = updater.download_firmware(
            update_info['version'],
            update_info['checksum']
        )
        if updater.apply_update(firmware_path):
            print("设备需要重启以完成更新")
    except Exception as e:
        print(f"更新失败: {str(e)}")
else:
    print("设备固件已是最新")
物联网可视化
实时仪表盘
python
import dash
from dash import dcc, html
from dash.dependencies import Input, Output
import plotly.graph_objs as go
import pandas as pd
import random
from datetime import datetime

# 创建Dash应用
app = dash.Dash(__name__)

# 初始数据
initial_data = pd.DataFrame({
    'timestamp': [datetime.now()],
    'temperature': [25.0],
    'humidity': [50.0]
})

# 应用布局
app.layout = html.Div([
    html.H1("物联网设备监控仪表盘"),
    
    dcc.Interval(
        id='interval-component',
        interval=5*1000,  # 5秒
        n_intervals=0
    ),
    
    html.Div([
        html.Div([
            dcc.Graph(id='temp-gauge'),
            html.H3("当前温度", style={'text-align': 'center'})
        ], className="six columns"),
        
        html.Div([
            dcc.Graph(id='humidity-gauge'),
            html.H3("当前湿度", style={'text-align': 'center'})
        ], className="six columns")
    ], className="row"),
    
    dcc.Graph(id='temp-trend'),
    
    html.Div(id='alerts-container')
], className="container")

# 回调函数 - 更新数据
@app.callback(
    Output('temp-gauge', 'figure'),
    Output('humidity-gauge', 'figure'),
    Output('temp-trend', 'figure'),
    Output('alerts-container', 'children'),
    Input('interval-component', 'n_intervals')
)
def update_metrics(n):
    # 模拟新数据
    new_data = {
        'timestamp': datetime.now(),
        'temperature': 25 + random.uniform(-2, 2),
        'humidity': 50 + random.uniform(-5, 5)
    }
    
    # 更新数据集
    global initial_data
    initial_data = initial_data.append(new_data, ignore_index=True)
    
    # 温度仪表
    temp_gauge = go.Figure(go.Indicator(
        mode="gauge+number",
        value=new_data['temperature'],
        domain={'x': [0, 1], 'y': [0, 1]},
        gauge={
            'axis': {'range': [None, 40]},
            'steps': [
                {'range': [0, 20], 'color': "lightgray"},
                {'range': [20, 30], 'color': "gray"},
                {'range': [30, 40], 'color': "red"}
            ],
            'threshold': {
                'line': {'color': "black", 'width': 4},
                'thickness': 0.75,
                'value': 30
            }
        }
    ))
    temp_gauge.update_layout(height=300, margin=dict(t=0, b=0))
    
    # 湿度仪表
    humidity_gauge = go.Figure(go.Indicator(
        mode="gauge+number",
        value=new_data['humidity'],
        domain={'x': [0, 1], 'y': [0, 1]},
        gauge={
            'axis': {'range': [0, 100]},
            'steps': [
                {'range': [0, 30], 'color': "red"},
                {'range': [30, 70], 'color': "lightgray"},
                {'range': [70, 100], 'color': "blue"}
            ],
            'threshold': {
                'line': {'color': "black", 'width': 4},
                'thickness': 0.75,
                'value': 70
            }
        }
    ))
    humidity_gauge.update_layout(height=300, margin=dict(t=0, b=0))
    
    # 温度趋势图
    temp_trend = go.Figure()
    temp_trend.add_trace(go.Scatter(
        x=initial_data['timestamp'],
        y=initial_data['temperature'],
        name='温度',
        line=dict(color='red', width=2)
    ))
    temp_trend.add_trace(go.Scatter(
        x=initial_data['timestamp'],
        y=initial_data['humidity'],
        name='湿度',
        yaxis='y2',
        line=dict(color='blue', width=2)
    ))
    temp_trend.update_layout(
        yaxis=dict(title='温度 (°C)'),
        yaxis2=dict(
            title='湿度 (%)',
            overlaying='y',
            side='right'
        ),
        hovermode="x unified"
    )
    
    # 警报信息
    alerts = []
    if new_data['temperature'] > 28:
        alerts.append(html.Div(
            f"高温警报! 当前温度: {new_data['temperature']:.1f}°C",
            style={
                'color': 'white',
                'background': 'red',
                'padding': '10px',
                'margin': '10px 0',
                'border-radius': '5px'
            }
        ))
    if new_data['humidity'] > 70:
        alerts.append(html.Div(
            f"高湿度警报! 当前湿度: {new_data['humidity']:.1f}%",
            style={
                'color': 'white',
                'background': 'blue',
                'padding': '10px',
                'margin': '10px 0',
                'border-radius': '5px'
            }
        ))
    
    return temp_gauge, humidity_gauge, temp_trend, alerts

# 运行应用
if __name__ == '__main__':
    app.run_server(debug=True, host='0.0.0.0')
https://plotly.com/python/static/images/dash-dashboards/iot-dashboard.png

结语与学习路径
https://www.python.org/static/community_logos/python-logo-master-v3-TM.png

通过这十一篇系列教程,你已经掌握了:

物联网硬件交互与传感器集成

物联网通信协议(MQTT/CoAP)

边缘计算框架与应用

物联网数据处理与分析

物联网安全实践

实时可视化仪表盘开发

进阶学习方向:

专业领域深入:

工业物联网(IIoT)平台开发

智能家居系统集成

智慧城市解决方案

技术栈扩展:

5G与物联网融合应用

AIoT(人工智能物联网)开发

数字孪生技术实现

认证体系:

AWS IoT认证

Cisco IoT认证

工业物联网专业认证

开源贡献:

参与主流IoT框架开发

贡献边缘计算项目

开发物联网安全工具

Python在物联网领域的应用前景广阔,持续探索和实践将助你成为这一变革性技术的引领者!

边缘计算与物联网的结合 1.背景介绍 在现代科技的发展中,物联网(IoT)和边缘计算是两个重要的概念。物联网是一种普遍的网络概念,它连接了各种物理设备,包括电子设备、软件、传感器、执行器和网络,使它们能够收集和交换数据。而边缘计算则是一种分布式计算范式,它将计算任务、数据和服务靠近数据源的地方,也就是网络的边缘。 过去几年,物联网设备的数量和使用率都在快速增长。 阅读详情

相关推荐

Python-PlatformIO是一个开源的IoT开发的生态系统

PlatformIO 是一个开源的 IoT 开发的生态系统,它支持超过 350 个的嵌入式设备,超过 20 个的开发平台,超过 10 个的框架,可以说是 Arduino 生态圈的超集

Python实战:Python在物联网(IoT)设备编程中的应用

本文详细介绍了 Python 在物联网 (IoT) 设备编程中的应用。通过学习基础的物联网概念、数据通信、设备控制等核心知识,并掌握设备状态监控、数据收集等功能,现在可以灵活运用 Python 实现一个完整的物联网系统。我们还介绍了物联网的应用场景,以及如何根据实际需求进行定制。

oandy0的博客 2630

OpenCV卡尺工具实战:5步搞定工业级圆与直线拟合(附完整C++源码)

本文详细介绍了使用OpenCV卡尺测量工具实现工业级圆与直线拟合的5个关键步骤,包括核心原理、环境配置、边缘点提取优化、鲁棒性几何拟合实现及QT集成技巧。通过模块化C++源码和实战案例,帮助开发者快速掌握高精度尺寸测量技术,适用于机械零件、PCB板等工业检测场景。

uran的专栏 841

Python与物联网(IoT)应用

1. 背景介绍 1.1 物联网(IoT)的崛起 物联网(IoT)是指通过网络将各种物体连接起来,实现智能化管理和控制的一种技术。随着科技的发展,物联网已经成为了当今世界的一个热门话题。从智能家居、智能交通到工业自动化,物联网正在逐渐改变着我们的生活方式和工作方式。 1.2 Python在物联网领域的应用 Python作为一种简单易学、功能强大的编程语言,已经成为了物联网领域的热门选择。Py...

AI天才研究院 1701

SAP PI实战:5分钟搞定REST适配器同步接口配置(含Postman测试技巧)

本文详细介绍了如何在SAP PI中快速配置REST适配器同步接口,包括ESR设计、集成流配置及Postman测试技巧。通过实战步骤和关键参数设置,帮助开发者高效实现系统集成,特别适合需要实时数据交互的业务场景。

weixin_33738555的博客 485

2021年全国职业院校技能大赛高职组网络系统管理赛项

S1 Ruijie(config)#switch virtual domain 1 Ruijie(config-vs-domain)#switch 1 Ruijie(config-vs-domain)#switch 1 priority 150 Ruijie(config-vs-domain)#switch 1 description S1 Ruijie(config-vs-domain)#exit Ruijie(config)#vsl-port Ruijie(config-vsl-port)#po

bfq05234214的博客 1133

Python实现 IOT(物联网) 自动化测试

一转眼2020年了哈,来西门子已经四五个月了。2020年实在不寻常,全国被新冠病毒搞得人心惶惶,过完年后在家呆了一两个月没上班,全国都被按下了暂停键,不过好在现在已经控制住了,慢慢大家都开始上班了,不管怎样,愿明天更美好! 好了进入正题,进入西门子这几个月很懵逼,西门子做的电力行业,跟以前工作有点不搭边,不过好在同事都挺好,乐于助人,也慢慢的习惯下来。进入西门子做的第一个项目就是电能质量装...

xgh1951的博客 1万+

AXI_IIC调试实战:从失败到成功的读写操作经验分享

本文分享了调试Xilinx AXI_IIC IP核从失败到成功的实战经验。文章详细解析了IP核以FIFO和状态机为核心的工作机制,强调了状态寄存器查询与延时等待的关键作用,并提供了针对EEPROM的单字节读写操作完整代码与避坑指南,帮助开发者高效完成AXI_IIC读写操作。

weixin_29169505的博客 369

Python 物联网编程实践(四)

在本章中,我们探讨了如何使用树莓派检测运动并估计距离。我们学会了如何使用 PIR 传感器检测广泛的运动,以及如何使用开关型霍尔效应传感器来检测磁场的运动。我们还发现了如何使用超声波测距传感器在较大范围上估计绝对距离,以及如何使用比例型霍尔效应传感器在小范围上测量相对距离。本章中所有的电路和示例都是输入为主 - 告诉我们的树莓派发生了某些事件,比如检测到有人移动或正在测量距离。现在你已经处于一个很好的位置,可以将本章中涵盖的输入电路(还有第九章中的内容,测量温度、湿度和光照。

龙哥盟 965

安卓逆向实战:利用Frida-RPC自动化获取大麦演唱会数据

本文详细介绍了如何利用Frida-RPC技术实现安卓逆向自动化,以获取大麦演唱会数据。通过实战演示,从环境搭建、使用Frida动态分析定位核心签名算法,到封装为可复用的Python脚本,完整解析了自动化数据获取的技术路径与工程化思考。

cheese的博客 974

揭秘CAS:深入理解与应用解析

在并发编程中,Compare-And-Swap(CAS)机制作为一种无锁算法,凭借其高效性和避免线程阻塞的优势,受到广泛关注。CAS不仅在底层实现上有着重要地位,还在实际开发中发挥着关键作用。本文将从CAS的工作原理、在Java中的实现及其增强机制来回顾和加深理解一下CAS。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 85万+

Python 物联网指南(一)

物联网(IoT)正在改变我们的生活方式,代表着 IT 行业最大的挑战之一。开发者正在创建低成本设备,收集大量数据,相互交互,并利用云服务和基于云的存储。全世界的制造商都在进行令人着迷的项目,将日常物体转变为带有传感器和执行器的智能设备。咖啡杯不再是简单的物体了——它可以向你的智能手表发送消息,表明里面的液体已经达到合适的温度,这样你就可以放心地喝,无需担心是否太热。在你收到消息之前移动咖啡杯,你的可穿戴设备会振动以表明你还不必喝它。

龙哥盟 1442

com.sap.aii.af.service.cpa.CPAObjectNotFoundException: Couldn‘t retrieve inbound binding

错误消息:错误截图:该错误通常表示在集成配置中,未找到与特定消息匹配的入站绑定(Inbound Binding)。具体而言,错误消息中的 P/S/A(Party/Service/Action)值未在配置中找到对应的入站绑定。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 373

PinPong库驱动LattePanda开发板:Python硬件控制实践指南

在嵌入式开发和物联网项目中,硬件控制是连接软件逻辑与物理世界的关键环节。其核心原理在于通过特定的通信协议(如GPIO、I2C、UART)实现主控制器对传感器、执行器等外设的读写操作。这项技术的价值在于极大地简化了硬件编程的复杂度,使开发者能够使用高级语言(如Python)快速构建软硬件结合的应用,从而提升开发效率并降低原型验证门槛。典型的应用场景包括智能家居控制、环境监测、机器人原型开发以及教育领域的互动装置等。本文聚焦于利用PinPong库这一跨平台硬件控制库,在x86架构的LattePanda一代开发板

weixin_29192211的博客 272

【深度学习新浪潮】李飞飞团队VAGEN框架深度解析:让VLM智能体学会“三思而后行“

VAGEN框架的真正价值,不仅在于性能指标的突破,更在于重新定义了VLM智能体的发展方向——人工智能的进步不应只追求"做得对",更要实现"想得清"。李飞飞团队通过强制显式思考、动态表示适配和精细化奖励三大创新,让智能体第一次具备了可解释的世界建模能力。正如人类通过"观察-预测-行动"认识世界,VAGEN为AI注入的这种思考范式,或许正是通往通用人工智能的关键一步。对于开发者而言,开源的VAGEN框架不仅提供了强大的工具,更揭示了一个重要理念:让AI学会思考,比让它学会执行更重要。

专注:太空算力、AI infra、异构调度、大模型成本工程 280

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

边缘计算与IoT开发:构建智能边缘系统

边缘计算是一种分布式计算范式,将计算和数据存储放在靠近数据源的网络边缘,而不是依赖中心化的云服务器。低延迟:减少数据传输距离带宽节省:减少网络传输数据量隐私保护:敏感数据本地处理可靠性:在网络中断时仍能运行可扩展性:分散计算负载边缘计算与IoT的结合正在改变我们与周围世界的交互方式,为各种应用场景带来智能化和自动化。通过本文介绍的技术和方法,开发者可以构建高效、可靠的边缘系统。5G集成:利用5G的低延迟特性边缘AI:更强大的本地AI能力联邦学习:保护隐私的分布式学习边缘智能。

lady_mumu的博客 3590

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

如何快速掌握AWS IoT与Azure IoT:物联网平台终极指南

nwpu-cram项目是西北工业大学软件学院的复习资料精选,涵盖了从基础课程到专业领域的各类学习资源。本文将聚焦物联网平台中的两大巨头——AWS IoT与Azure IoT,为你提供简单易懂的对比分析和学习指南,帮助新手快速入门物联网云平台开发。 ## 物联网平台概述:AWS IoT与Azure IoT核心功能解析 物联网(IoT)平台是连接物理设备与云端服务的关键桥梁,而AWS IoT和Az

gitblog_01152的博客 871

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Python 在物联网(IoT)领域的发展前景

``html Python 在物联网(IoT)领域的发展前景。

2501_91246437的博客 1651

Python在物联网(IoT)中的应用:从边缘计算到云端数据处理

在物联网(IoT)这个碎片化极其严重的领域,Python凭借其简洁的语法、庞大的生态系统和卓越的跨平台能力脱颖而出。根据2023年嵌入式世界大会的调查报告,Python在IoT开发者中的使用率已达到42%,仅次于C语言。这种趋势并非偶然——当我们在资源受限的设备上部署传感器数据采集,或在云端处理海量设备数据时,Python展现出惊人的适应性。

weixin_42636075的博客 917

Python知识点:如何使用Google Cloud IoT与Python进行边缘计算

Google Cloud IoT提供了一系列的服务,包括设备管理、数据传输、数据处理和分析等。它基于Google Cloud Pub/Sub构建,可以处理设备生成的大量数据,并支持多种语言和平台。

码农超哥的博客 1298

IoT新手速通:2025智能家居DIY成就感爆棚

想象一下,当你清晨醒来,窗帘自动拉开,让阳光温柔地洒进房间;当你准备出门,只需说一声"我出门了",家中的灯光、空调、电视自动关闭,门锁自动锁好;当你下班回家,智能音箱早已根据你的喜好准备好了温馨的音乐,空调已经将室内温度调节到最舒适的状态,热水器也已经烧好了热水;当你躺在床上,说一声"晚安",所有的设备都会进入睡眠模式,只剩下夜灯散发着柔和的光芒。这不是科幻电影中的场景,而是2025年智能家居已经实现的功能!

欢迎来到智能安全前线!这里是AI与信息安全交汇之地。我们以代码为武器,深入大模型攻防实战,破解系统漏洞。追踪OpenAI、Meta前沿动态,用红蓝对抗思维,锻造智能时代的坚盾与利矛。 1406

边缘计算:Python在IoT中的应用

本文探讨Python在边缘计算和物联网(IoT)领域的应用,重点分析MicroPython和CircuitPython两大轻量级实现。文章从边缘计算的基本原理入手,阐述其低延迟、带宽节省等优势,详细介绍这两种Python实现的技术特点、硬件支持及开发流程。通过对比分析,展示了MicroPython更适合专业开发者,而CircuitPython则针对教育场景优化。文章还涵盖微控制器编程的核心概念,包括GPIO控制、传感器接口等关键技术,为Python开发者进入物联网领域提供实践指导。

七夜zippoe的博客 745

Microsoft Azure & NVIDIA IoT 开发者季 I|Azure IoT & NVIDIA Jetson 开发基础

Microsoft Azure & NVIDIA IoT 开发者季来啦

Kinfey 2710

Python物联网开发实践

比如,我们可以创建一个基于Python的小型天气站,用于收集家中的温湿度数据,并将这些数据发送到云服务器上进行存储和分析。数据采集只是开始,真正的价值在于数据的处理和分析。你可以把这里当作自己的家,无论是工作之余的小憩,还是寻找灵感的驿站,我都希望你能在这里找到属于你的那份快乐和满足。在科技的海洋里,Python就像一位多才多艺的音乐家,能够演奏各种乐器,而物联网则是那台复杂的电子合成器,二者相遇,便能奏出美妙的旋律。

master_chenchen的博客 1742
上一篇: Python 自动化运维与DevOps实践
下一篇: PHP 8.0 超维意识编程终极指南(终篇)目录跨维度架构模式量子生物混合智能时空连续体数据库群体意识协作框架全宇宙部署策略终极伦理治理模型宇宙级PHP引擎后奇点时代发(20)
gohacker
博客等级 码龄18年 85粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值