28、构建与树莓派交互的iOS应用

构建与树莓派交互的iOS应用

1. 项目搭建

1.1 创建iOS项目

首先,创建一个空的单页项目。此应用旨在通过新创建的I2C接口与树莓派API进行通信,而非构建复杂的UI界面,因此应用会采用简约设计,仅包含几个用于触发树莓派操作的UI元素。借助这个演示应用,能够触发命令来控制树莓派上PiGlow板的灯光开关。

1.2 允许外发HTTP调用

在开发过程中,可能会遇到如下问题:应用进行HTTP调用时,会出现类似下面的堆栈跟踪信息:

Application Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app’s Info.plist file.

根据苹果文档,应用传输安全(ATS)允许应用在其Info.plist文件中添加声明,指定需要进行安全通信的域名。ATS可防止意外泄露信息,提供安全的默认行为,并且易于采用。无论开发新应用还是更新现有应用,都应尽快采用ATS。

若开发新应用,应仅使用HTTPS;若更新现有应用,应尽可能多地使用HTTPS,并制定计划尽快迁移应用的其余部分。

为解决此问题,需在info.plist中创建一个“Allow Arbitrary Loads”条目,并将其值设置为“true”。在Xcode中开始输入时,会自动提示名称(App Tr

相关推荐

【树莓派】Samba局域网内实现文件共享

文章目录前言一、软硬件准备1、硬件准备2、软件准备二、实现方法树莓派换源1.先备份原来数据2.删除或加#修改或注释掉原来的源,修改软件更新源为清华的源3.修改系统更新源4.更新软件源列表、软件版本安装Samba配置方法第一步:更新apt-get第二步:安装Samba第三步:修改Samba配置文件第四步:添加pi用户第五步:修改smb密码客户端连接Windows端:总结 前言 Samba是一种局域网文件共享系统,安装上Samba后,在局域网内任何设备都可以共享(读写)树莓派内的文件资源,通过局域网实现文件共

silver_lf的博客 2642

树莓派PICO点灯之后:用MicroPython玩转GPIO控制与传感器连接

本文深入探讨了如何利用MicroPython在树莓派PICO上进行GPIO控制与传感器连接。从基础的LED控制到高级的PWM调光,再到DHT11温湿度传感器和I2C设备的集成,详细介绍了硬件交互的实现方法。通过实战项目环境监测站的示例,展示了如何综合运用这些技术,为开发者提供了全面的硬件开发指南。

weixin_33739541的博客 190

Python语言学习:Python语言学习之硬件交互应用(arduino、树莓派等)相关的简介、案例应用之详细攻略

​ Python语言学习:Python语言学习之硬件交互应用(arduino、树莓派等)相关的简介、案例应用之详细攻略 目录 Python与硬件交互应用 Python与硬件交互应用 如果在学习python之前,有计算机硬件基础的同学,可以尝试用pyqt软件写一个串口调试助手;当然,如果有软件基础的同学,也可以尝试用pyqt写一个网络调试助手,这样掌握python与软件、硬件的知识会更快。 1、适合运行python的嵌入式硬件系统 1.1、嵌入式硬件系统(arduino、树莓派)

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 2480

22、利用watchOS构建苹果手表应用及iOS应用安全防护

本文详细介绍了如何利用watchOS构建苹果手表版的IOTFit应用,并实现与iOS版的代码和数据共享。同时,深入探讨了物联网应用面临的安全隐患,并提供了增强iOS应用安全的具体措施,包括使用Face ID、Touch ID和Keychain Services来保护用户数据。此外,还实现了应用的锁屏界面及其交互逻辑,确保敏感信息的安全访问。

t8u9v0的博客 100

17、树莓派Pico机器人的蓝牙远程操作与PID算法应用

本文介绍了如何使用树莓派Pico实现机器人的蓝牙远程操作与PID算法控制。通过蓝牙低功耗(BLE)技术,实现智能手机与机器人之间的双向通信,支持远程数据监控与按钮控制。结合Bluefruit应用的绘图功能,可实时可视化传感器数据。进一步引入PID算法,利用比例、积分和微分控制实现机器人对墙壁的平稳跟随,并详细讲解了PID参数调优方法。文章还提供了代码示例与扩展练习,帮助读者深入理解机器人控制原理,为进一步开发智能机器人应用奠定基础。

ppp33的博客 84

4、树莓派操作系统下载与设备连接指南

本文详细介绍了树莓派操作系统的下载与设备连接全过程。从Linux操作系统的基本概念入手,讲解如何使用Raspberry Pi Imager工具将Raspberry Pi OS或其他操作系统(如Ubuntu、RetroPie等)写入microSD卡,并逐步指导插入SD卡、连接外设、显示器、网络和音频设备的正确顺序。同时涵盖了高级设置、蓝牙配对、相机模块连接测试以及通过桌面和raspi-config进行系统配置的方法,帮助用户快速上手树莓派,开启各类创新项目。

y2z3a4b5c的博客 111

树莓派与iOS交互应用

本文介绍如何配置树莓派并使用Python和Flask构建控制LED的API,通过I2C和GPIO接口实现硬件交互,并开发简易iOS应用远程调用API,完成对PiGlow模块的灯光控制,涵盖软硬件配置及HTTP通信全过程。

postgres8guard的博客 685

构建树莓派上的Alexa AirPlay播放服务器:完整指南

树莓派是一种袖珍型单板计算机,以其低成本、高集成度以及开放的开发环境赢得了广大技术爱好者的青睐。本章将介绍树莓派的基本概念、功能以及其在项目中的多样化应用。树莓派具备GPIO接口,可以连接各种外围设备,同时支持多种操作系统,其高性能与低功耗的特性使其成为学习、原型设计和物联网应用的理想选择。AirPlay是苹果公司开发的一项无线技术,它允许用户轻松地将音频、视频从苹果设备传输到兼容的接收器、智能电视或Apple TV。其核心是AirPlay协议,利用Wi-Fi网络实现了设备间的点对点通信。

weixin_42462474的博客 1074

树莓派远程桌面工具完整使用指南与实战配置

场景推荐工具优势文件编辑、服务管理SSH + Vim快速响应,低资源占用GUI软件运行(如浏览器)VNC图形交互必需日志监控SSH + tmux多窗口并行,断线重连能力强批量部署自动化程度高,无需GUI介入远程桌面看似只是一个“连接功能”,但实际上牵涉操作系统、网络协议、图形系统、安全机制等多个层面的知识。

weixin_36474001的博客 1049

DSP28335与Vofa+上位机通信实战:SCIb配置避坑指南(附完整代码)

本文提供DSP28335与Vofa+上位机通信的实战指南,重点解析SCIb模块配置的常见问题与解决方案。针对研旭开发板的硬件连接、波特率精确计算、FIFO高效使用以及FireWater协议封装进行了详细说明,并附有完整代码,帮助开发者快速实现实时数据可视化与波形分析,提升调试效率。

weixin_29172963的博客 149

baostock实战:如何用Python批量下载多只股票的历史数据(含常见错误排查)

本文详细介绍了如何使用Python和baostock库批量下载多只股票的历史数据。内容涵盖从环境搭建、代码标准化到构建稳健的批量下载框架的全过程,并重点提供了高级错误处理、网络重试、数据验证及内存管理等实战解决方案,帮助用户高效构建股票数据处理流水线。

nice1的博客 1081

华中科技大学计算机组成原理-单总线CPU设计(全部通关)

【计算机组成原理】 单总线CPU实验 华中科技大学-计算机组成原理 实验三 单总线CPU设计 第1关 MIPS指令译码器设计 第2关 单总线CPU微程序入口查找逻辑 第3关 单总线CPU微程序条件判别测试逻辑 第4关 单总线CPU微程序控制器设计 第5关 采用微程序的单总线CPU设计 第6关 现代时序硬布线控制器状态机设计 第7关 现代时序硬布线控制器设计

紫荆鱼的博客 4万+

西门子200 SMART与博图WinCC通讯全攻略:从PC Access到S7-200协议避坑指南

本文详细解析了西门子S7-200 SMART PLC与博途WinCC上位机通讯的两种主流方案:基于PC Access SMART的OPC通讯和利用博途内置S7-200协议驱动直连。文章深入对比了两种架构的优缺点、配置步骤,并提供了从网络层到软件层的深度排错指南与性能优化建议,帮助工程师高效、稳定地实现系统集成。

gg901的博客 808

概率数据关联(PDA):多目标跟踪的基石算法

1. 为什么需要概率数据关联? 2. 核心思想与假设条件 3. 算法核心:概率分配与状态更新 4. 典型应用场景与优势 5. 挑战与改进方向 6. 下期预告

qq_44965657的博客 1462

DCDC--控制方式(Control Mode)

DCDC反馈控制方式

网始如芯个人博客 1万+

61、神经科学中的分岔与双分子反应研究

本文探讨了神经科学中的分岔现象与双分子反应建模。在神经元网络中,通过分析四细胞网络的呼吸节律振荡,揭示了分岔对振荡频率和占空比的影响,并区分了单神经元与网络层面的分岔特性。在神经群体模型中,系统参数变化引发的分岔可导致振荡、混沌等动态行为转变,文中详细介绍了局部分岔、全局分岔和高余维分岔的机制,并以Jansen-Rit模型为例展示了输入水平变化下的分岔过程。在分子层面,重点介绍了MWC模型在描述配体与多位点蛋白质结合中的应用,涵盖其构象状态、平衡常数及统计因子。研究表明,分岔理论和双分子反应建模为理解神经系

yog99的博客 80

华为OD机考真题 新系统 - 数列求值(Java/Py/C/C++/Js/Go)

华为OD机试真题 新系统【数列求值】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【数列求值】多语言题解。

qq_45776114的博客 661

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: 17、应用特定云平台:从传统到服务导向的变革
下一篇: 8、智能家庭服务机器人路径规划:从RRT到改进算法
github5actions
博客等级 码龄1天 0粉丝 1824原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值